我使用Ajax调用带有一些参数的IP。
在重要的呼叫(让我们称之为“呼叫2”)可以执行之前,它必须进行Ajax调用才能获得sessionId(并调用“call 1”)。 sessionId是必要的,可以对IP进行任何调用,并让它对参数执行某些操作。
但是当我的功能低于彼此时,它首先执行“调用2”,然后执行“调用1”。
经典的异步行为但是因为在Ajax调用中我说async: false
,我真的不明白为什么它没有做我说它必须做的事情。
完成Ajax Call“call 1”:
Url = "_ip_?action=getsessionid";
$.ajax({
url: Url,
type: "Post",
dataType: "jsonp",
async: false,
success: function( json ){
var j = $.parseJSON(json);
var sessionid = j['sessionId'];
},
error: function( errorThrown ) {
console.log(errorThrown);
}
});
而Ajax称之为“call 2”:
Url = "_ip_?action=action&sessionId=" + sessionid;
$.ajax({
url: Url,
type: "Post",
dataType: "jsonp",
async: false,
success: function( json ){
var j = JSON.parse(json);
//do something with j
},
error: function( errorThrown ) {
console.log(errorThrown);
}
});
假设变量sessionid确实将sessionid提供给“call 2” 如您所见,我返回了一个json字符串。
我现在所做的是,只有在成功执行第一个Ajax调用时,才会初始化并执行下一个Ajax调用。这对我来说似乎是一种解决方法,而不是我尝试完成的正确方法。
答案 0 :(得分:1)
来自JQuery.ajax文档:
跨域请求和 dataType:“ jsonp”请求不支持同步操作。。请注意,同步请求可能会暂时锁定浏览器,并在请求处于活动状态时禁用任何操作。从jQuery 1.8开始,不建议使用async:false和jqXHR($ .Deferred);您必须使用成功/错误/完成回调选项,而不是jqXHR对象的相应方法(例如jqXHR.done()或已弃用的jqXHR.success())。
有了。我的解决方案是在成功函数中发出下一个ajax请求。 JQuery文档进一步说明了这一点。 http://api.jquery.com/jquery.ajax/
答案 1 :(得分:-1)
将var sessionid定义为全局变量,并在ajax call1中为该值赋值,然后在call2中访问该值。
var sessionid='';
Url = "_ip_?action=getsessionid";
$.ajax({
url: Url,
type: "Post",
dataType: "jsonp",
async: false,
success: function( json ){
var j = $.parseJSON(json);
sessionid = j['sessionId'];
},
error: function( errorThrown ) {
console.log(errorThrown);
}
});