Ответ 1
опечатка.
Измените это:
aync: false
в
async: false
И метод ajax
все еще возвращает объект jqXHR, выполняющий запрос, а не результат. Используйте параметр data
в вызове success
и храните его где-нибудь.
Я знаю, что этот вопрос можно было спросить тысячу раз, но я не могу найти ответ. Я хочу result
быть данными, возвращаемыми из ajax-запроса, который должен быть массивом json-data (результат 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
?
опечатка.
Измените это:
aync: false
в
async: false
И метод ajax
все еще возвращает объект jqXHR, выполняющий запрос, а не результат. Используйте параметр data
в вызове success
и храните его где-нибудь.
Прежде всего удалите aync: false
из своего кода. Он должен быть записан async: false
, но вам не нужно его для достижения своей цели, а то, что он на самом деле делает, блокирует весь пользовательский интерфейс браузера, что приводит к ужасному пользователю. Помните, что "A" в AJAX означает Асинхронный.
Результат вызова $.ajax()
- это prom, который не совпадает с вашими данными, но он может быть полезен для доступа к вашим данным. Вам просто нужно использовать его определенным образом.
Попробуйте изменить:
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);
Вы упомянули, что 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)
.
Существует небольшая орфографическая ошибка aync: false должен читать async: false, предполагая, конечно, что вам требуется, чтобы запрос выполнялся синхронно, т.е. для остальной части вашего кода ждать этого результата.
Я думаю, что основная проблема здесь в том, что результат, который вы пытаетесь вывести на консоль, не ссылается на запрос ajax.
Это ваш выбор, как вы ссылаетесь на данные, возвращаемые с помощью запроса ajax, вы выбрали данные слова, которые так же легко могли быть результатом или 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
});