2010-01-30 3 views
4

Я пытаюсь получить функцию для выполнения ajax-запроса, а затем вернуть интерпретируемый JSON в качестве объекта. Однако по какой-либо причине, как только этот запрос выполняется, данные доступны только из функции.Возврат данных из запроса jQuery ajax

function getCacheImage(direction) { 

      jQuery.ajax({ 
        url: json_request_string, 
        success: function(data) { 
        return data; 
        } 
      }); 

    } 

Как я могу заставить эту функцию правильно возвращать данные?

Спасибо.

ответ

9

Вам необходимо либо использовать синхронный запрос ajax (не типичный, либо рекомендованный), а захватить данные в переменную во внешней области или выяснить, как манипулировать данными в функции обратного вызова. Проблема в том, что функция ajax возвращается до завершения вызова ajax - она ​​асинхронна.

Синхронный способ:

function getCacheImage(direction) { 
     var capture; 
     jQuery.ajax({ 
       url: json_request_string, 
       aSync: false, 
       success: function(data) { 
        capture = data; 
       } 
     }); 
     return capture; 
} 

Типичные, используя обратный вызов

function getCacheImage(direction,callback) { 

     jQuery.ajax({ 
       url: json_request_string, 
       success: function(data) { 
        callback(data); 
       } 
     }); 
} 

getCacheImage('left', function(data) { 
     ...do something with the data... 
} 
3

Вы не можете. Первая буква аббревиатуры AJAX означает асинхронность, что означает, что запросы AJAX отправляются и управление немедленно возвращается вызывающей функции. Что вам нужно сделать, так это работать с данными в функции обратного вызова.

0

Вы возвращаете данные в код, вызывающий функцию обратного вызова. Этот код не может отправить данные назад во времени, чтобы он мог быть возвращен из функции, которая начала запрос.

Независимо от того, что вы хотите делать с данными, вы выполняете функцию обратного вызова.

Смежные вопросы