Возвращение данных из 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),

Другие вопросы по тегам