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