JQuery асинхронных и JSON данных - PullRequest
5 голосов
/ 13 апреля 2011

после javascript jquery и использования eval я все еще не мог получить jquery для асинхронного чтения данных.

 data1=[1,2,3,4]

Примечание: я включил async: true в приведенный ниже пример просточтобы показать разницу

В приведенном ниже примере возвращаемое значение "null"

$(document).ready(function(){

var myArray=[];
myArray=getValues();
alert(myArray);
        function getValues(){
        var result=null;
             $.ajax({
                url: 'data1.html',
                type: 'get',
                dataType: 'json',
                cache: false,
                success: function(data) {result = data;},
                async:true,
                });
            return result;
        };
})

и приведенный ниже пример работают нормально и выдают результат в массиве, т.е. [1,2,3,4]

$(document).ready(function(){

var myArray=[];
myArray=getValues();
alert(myArray);
        function getValues(){
        var result=null;
             $.ajax({
                url: 'data1.html',
                type: 'get',
                dataType: 'json',
                cache: false,
                success: function(data) {result = data;},
                async:false,
                });
            return result;
        };
 })

Может кто-нибудь объяснить, как получить результаты асинхронно Спасибо

Ответы [ 4 ]

8 голосов
/ 13 апреля 2011

Я бы изменил на это ...

$(document).ready(function(){

     function postProcessing(data) {
       var myArray = data;
       alert(myArray);
     }


    getValues();

        function getValues(){
             $.ajax({
                url: 'data1.html',
                type: 'get',
                dataType: 'json',
                cache: false,
                success: postProcessing,
                async:true,
                });
        };
})
3 голосов
/ 13 апреля 2011

Это должно сработать, как и у меня, но я советую вам не делать этого.

<script src="jquery.js"></script>
<script>
$(document).ready(function(){

    /*don't do your stuff here*/
        /*do inside success*/

    function getValues(){
        var result=null;
        $.ajax({
            url: 'phpinfo.php',
            type: 'get',
            dataType: 'json',
            cache: false,
            success: function(data) { if(data != null){ alert(data); } },
        });
        return result;
    };

})
</script>
0 голосов
/ 20 марта 2013

По умолчанию все запросы отправляются asynchronously. true по умолчанию.

Если вам нужны синхронные запросы, установите эту опцию на false. Cross-domain запросов и dataType: "jsonp" запросов не поддерживают синхронную работу. Обратите внимание, что синхронные запросы могут временно блокировать браузер, отключая любые действия, когда запрос активен.

Если вам необходимо убедиться, что метод всегда отображает самые последние данные, используйте cache:false и async:false. Также, чтобы избежать тайм-аута / ошибки, используйте success / error / complete опции обратного вызова.

0 голосов
/ 13 апреля 2011

первая часть, результат возвращается асинхронно в myArray, но до этого функция оповещения уже была выполнена, потому что ajax произошел асинхронно.Поэтому, если вы разместите оповещение сразу после «возврата результата», вы должны увидеть результат.

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