Ajax调用不会同步发生

时间:2015-09-16 10:15:14

标签: javascript jquery json ajax

我使用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调用。这对我来说似乎是一种解决方法,而不是我尝试完成的正确方法。

2 个答案:

答案 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);
    }
});