Возврат данных из ajax-запроса jQuery - PullRequest
4 голосов
/ 30 января 2010

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

    function getCacheImage(direction) {

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

    }

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

Спасибо.

Ответы [ 3 ]

9 голосов
/ 30 января 2010

Вам нужно либо использовать синхронный 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 голосов
/ 30 января 2010

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

0 голосов
/ 30 января 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...