Возвращение данных из AJAX приводит к странному объекту
Я знаю, что этот вопрос, возможно, задавали тысячу раз, но я не могу найти ответ. я хочу result
быть данными, возвращаемыми из ajax-запроса, который должен быть массивом данных json (результат console.log(data)
).
var result = $.ajax({
type: 'GET',
url: dataPath,
dataType: 'json',
success: function(data) {
console.log(data)
},
error: function(){
//alert("damn");
},
data: {},
aync: false
});
console.log(result);
Тем не мение, console.log(result);
вернет какой-то странный объект, с которым я не знаю, как обращаться. Почему нет result
знак равно data
?
5 ответов
Опечатка.
Изменить это:
aync: false
чтобы:
async: false
И ajax
Метод по-прежнему возвращает объект jqXHR, выполняющий запрос, а не результат. Использовать data
параметр в success
позвоните и сохраните где-нибудь.
Прежде всего удалите aync: false
из вашего кода. Должно быть написано async: false
но вам это не нужно для достижения своей цели, и на самом деле он блокирует весь пользовательский интерфейс браузера, что приводит к ужасному взаимодействию с пользователем. Помните, что "A" в AJAX означает асинхронный.
Результатом $.ajax()
call - это обещание, которое не совпадает с вашими данными, но все же может оказаться полезным для доступа к вашим данным. Вам просто нужно использовать это определенным образом.
Попробуйте изменить:
console.log(result);
чтобы:
result.done(function (data) {
console.log(data);
});
или же:
result.done(function (data) {
console.dir(data);
});
или даже это может работать - не проверено:
result.done(console.dir);
Смотрите этот ответ для лучшего объяснения.
Инициализировать result
внутри success
функция.
var result;
$.ajax({
type: 'GET',
url: dataPath,
dataType: 'json',
success: function(data) {
result = data;
console.log(data)
},
error: function(){
//alert("damn");
},
data: {},
async: false
});
console.log(result);
Существует небольшая орфографическая ошибка: aync: false должен читать async: false, если, конечно, требуется, чтобы запрос выполнялся синхронно, т. Е. Чтобы оставшаяся часть кода ожидала этого результата.
Я думаю, что главная проблема здесь в том, что на результат, который вы пытаетесь вывести на консоль, не ссылается запрос ajax.
Вы сами выбираете, как ссылаться на данные, возвращаемые запросом ajax, вы выбираете слово data, которое также легко может быть результатом, или json_Data или return_Data, или....
Поэтому для отправки результата запроса ajax на консоль я бы предложил:
var result = $.ajax({
type: 'GET',
url: dataPath,
dataType: 'json',
success: function(result) {
console.log(result)
},
error: function(){
//alert("damn");
},
data: {},
async: false
});
Ты упомянул console.log(result)
возвращает странный объект, на самом деле этот странный объект известен как xhr (XMLHttpRequest)
объект.
Поскольку вызов syncronous
потому что async: false
так что легко получить returned data
лайк
var result = $.ajax({...}); // get the xhr object in to result
console.log(result.responseText); // xhr object has a "responseText" property
Как потому что result.responseText
будет доступен только после того, как запрос завершится, и нет возможности выполнить это console.log(result.responseText);
потому что async:false
, перед request
завершается, потому что syncronous
ajax-запрос зависает на всем, прежде чем он завершит запрос.
В вашем success
Перезвоните data
будет объектом из-за dataType: 'json'
но вне success
обратный вызов, т.е. console.log(result.responseText);
будет только текст, поэтому, чтобы использовать его как объект, вы должны преобразовать его в объект, используя $.parseJSON(result.responseText)
,