Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一系列相互需要的AJAX调用';s结果_Javascript_Php_Jquery_Ajax_Cordova - Fatal编程技术网

Javascript 一系列相互需要的AJAX调用';s结果

Javascript 一系列相互需要的AJAX调用';s结果,javascript,php,jquery,ajax,cordova,Javascript,Php,Jquery,Ajax,Cordova,我正在对服务器进行ajax调用,它将返回一些存储在本地存储项中的数据(不需要解释原因,但需要这样做) 然后,我需要在下面的ajax调用中恢复该localStorage项,就在第一个调用之后 我的问题是:由于是异步的,第二个调用在设置变量之前就开始了,所以我得到了null 我试着“什么时候完成”,“什么时候,然后”,告诉第二个第一个成功了。。。而且似乎什么都不起作用。连续的ajax调用。 在您的情况下,最好的解决方案可能是使用顺序ajax调用 编辑:我现在看到jquery标记。。这段代码是纯jav

我正在对服务器进行ajax调用,它将返回一些存储在本地存储项中的数据(不需要解释原因,但需要这样做)

然后,我需要在下面的ajax调用中恢复该localStorage项,就在第一个调用之后

我的问题是:由于是异步的,第二个调用在设置变量之前就开始了,所以我得到了null


我试着“什么时候完成”,“什么时候,然后”,告诉第二个第一个成功了。。。而且似乎什么都不起作用。

连续的ajax调用。

在您的情况下,最好的解决方案可能是使用顺序ajax调用

编辑:我现在看到jquery标记。。这段代码是纯javascript,适用于包括ie10和ios/android在内的所有现代浏览器。它叫xhr2。但当您使用localStorage时,这应该不是问题

function ajax(a,b,c){ // Url, Callback, just a placeholder
 c=new XMLHttpRequest;
 c.open('GET',a);
 c.onload=b;
 c.send()
}

function store(array){
 window.localStorage['data']=JSON.stringify(array)
}

//***************************************************************

function firstCheck(){
 var call1data=JSON.parse(this.response);
 store(call1data);
 // get what you need
 ajax('url',secondCheck)
}

function secondCheck(){
 var 
 call2data=JSON.parse(this.response),
 call1data=JSON.parse(window.localStorage['data']);
 // whatever...
}

ajax('url',firstCheck);
现在如果你更具体一点。。。我可以详细说明代码


更多关于正在使用的ajax函数的信息。还有一个例子是post


如果您有任何问题,请提问。

我假设您是在类似setTimeout的循环中调用此ajax函数

如果不希望ajax是异步的,则第三个参数为:

ajax=new XMLHttpRequest();
ajax.open("GET","something.php",true); 
将模式设置为异步或非异步

更好的解决方案是让状态更改时的ajax在其找到时调用新的ajax调用

   ajax.onreadystatechange=function(){
       if (ajax.readyState==4 && ajax.status==200)
       {
           callMyAjaxFunctionAgain(ajax.response);
       }
   }

当第一次调用返回时,需要使用回调

使用$.ajax有两种方法:

第一种方式:

$.ajax({
    type: "GET",
    url: url,
    data: data,
    success: function (data){
        //store your localStorage item (data)

        //do another call when the first call is successful
        $.ajax({
            type: "GET",
            url: url,
            data: data,
            success: function (data){
                //restore your localStorage item
            }
        });
    }
});
第二种方式:

$.ajax({
    type: "GET",
    url: url,
    data: data,
    success: mySuccessFunction
});

function mySuccessFunction(data){
    //store your localStorage item (data)

    //do another call when this call is successful
    $.ajax({
        type: "GET",
        url: url,
        data: data,
        success: function (data){
            //restore your localStorage item
        }
    });
}
或者,如果您更喜欢使用$进行快速/速记,请获取:

$.get( "url", mySuccessFunction);

function mySuccessFunction(data){
    //store localStorage item

    $.get( "url", function(data){
        //restore localStorage item
    });
}

显示一些代码会很有用。为什么不在第一个请求成功后使用回调方法呢?请发布您的代码片段。如果没有它,我们将无法正确地指导您,您是否有必要进行异步calls@NitinRawat你是说他是同步制作的吗?这几乎总是一个坏主意。使用
$.get
可能会稍微不那么冗长,但是+1,因为poster要求使用jQuery解决方案,而这是唯一的一个。