我正在向服务器发出一个ajax调用,该服务器返回一些我存储在localStorage项目中的数据(不需要解释原因,但需要像那样)。
然后我需要在第一个ajax调用之后立即恢复该localStorage项目。
我的问题:同步,第二次调用在变量设置之前开始,所以我得到了空。
我尝试了#34;当他们在#34;," when.then"时,在第一次成功时调用了第二个......似乎没有任何效果。
答案 0 :(得分:5)
顺序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功能。还有一个帖子的例子。
https://stackoverflow.com/a/18309057/2450730
如果您有任何问题,请询问。
答案 1 :(得分:2)
您需要在第一次调用返回时使用回调。
使用$ .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:
的更快/更短的方式$.get( "url", mySuccessFunction);
function mySuccessFunction(data){
//store localStorage item
$.get( "url", function(data){
//restore localStorage item
});
}
答案 2 :(得分:1)
我假设您在setTimeout类似循环中调用此ajax函数?
如果,你不希望ajax是异步的,那就是:
的第三个参数ajax=new XMLHttpRequest();
ajax.open("GET","something.php",true);
将模式设置为异步或不同步。
更好的解决方案是在状态变化时获取ajax,以便在其finsihed时调用新的ajax调用。
ajax.onreadystatechange=function(){
if (ajax.readyState==4 && ajax.status==200)
{
callMyAjaxFunctionAgain(ajax.response);
}
}