Как заставить JQuery обрабатывать ответ Ajax как обычный текст вместо JSON
Я использую API, который возвращает JSON. Синтаксис JSON, возвращаемый API, нарушен, и я не могу контролировать его.
Я использую вызов JQuery Ajax и возвращает 500 - Внутренняя ошибка сервера. Я хочу получить ответ API и простой текст и исправить синтаксис JSON. он просто имеет дополнительную запятую в конце, которую я могу удалить. Но я не могу получить ответ как обычный текст.
Я пробовал несколько подходов, таких как установка типа контента и/или принятие заголовков в обычный текст с использованием dataType в обычный текст, как показано ниже. Мой код выглядит следующим образом.
$.ajax({
url: apiUrl + "/" + customerId + "/accounts/" + accountId,
data: "client_id=" + clientId,
dataType: 'text',
type: 'GET',
async: true,
statusCode: {
404: function (response) {
console.log('Invalid Transaction details');
},
200: function (response) {
//response processing code here
}
},
error: function (jqXHR, status, errorThrown) {
//Error handling routine
}
});
Обновление 1
API отлично работает при прямом вызове из браузера или скрипача. Это как я узнаю, что синтаксис JSON нарушен.
Ответы
Ответ 1
ваш код работает хорошо, должна быть другая ошибка
Посмотрите мою скрипку
$.ajax({
url: 'http://ip.jsontest.com/',
dataType: 'text',
type: 'GET',
async: true,
statusCode: {
404: function (response) {
alert(404);
},
200: function (response) {
alert(response);
}
},
error: function (jqXHR, status, errorThrown) {
alert('error');
}
});
Он возвращает json из тестового API в виде строки, все отлично.
Ответ 2
$.ajax({
// the URL for the request
url: apiUrl + "/" + customerId + "/accounts/" + accountId,
// the data to send (will be converted to a query string)
data: "client_id=" + clientId,
// whether this is a POST or GET request
type: "GET",
// the type of data we expect back
//Use JSON so that the browser knows how to format and transfer the data correctly, you
//can always converted to plain text once you receive it
dataType: 'json',
async: true,
// code to run if the request succeeds;
// the response is passed to the function
//output everything to the console to inspect the response that way you can see everything
//the API sends back. I'm assuming you know how to Inspect Element and look at the Console
//on your browser
success: function( response ) {
console.log(response)
},
// code to run if the request fails; the raw request and
// status codes are passed to the function
error: function( xhr, status, errorThrown ) {
alert( "Sorry, there was a problem!" );
console.log( "Error: " + errorThrown );
console.log( "Status: " + status );
console.dir( xhr );
},
// code to run regardless of success or failure
complete: function( xhr, status ) {
console.log(xhr, status)
}
});
Ответ 3
Вы сказали
Состояние jqXHR равно 0, и сообщение об ошибке не отображается
и
Я скопировал URL-адрес, который отображается на вкладке сети в инструментах разработчика для этого запроса, и попробовал его в браузере напрямую, и он дал мне ответ json.
в ваших комментариях, что заставляет меня думать, что это проблема CORS поверх 500 - Internal Server Error
, которую вы испытываете на стороне сервера.
Если вы хотите получить ответ сервера как обычный текст (и вы можете каким-то образом обработать ваш запрос API, чтобы не опрокидывать ошибку 500), а затем использовать серверную wrapper/proxy (или PHP + cURL), чтобы получить ваши данные со стороннего сайта в виде текста, отфильтровать его или иначе исправьте его, затем eval()
он (на свой страх и риск) в качестве надлежащего объекта JSON.