Javascript 阿贾克斯终于打电话了

Javascript 阿贾克斯终于打电话了,javascript,jquery,ajax,Javascript,Jquery,Ajax,在我的jquery函数中,我使用服务器端方法进行了两次ajax调用,并且运行良好, 问题是,在ajax代码行运行之后,最后一次调用ajax,但这行代码会继续运行 function Rbook(b) { var one = $(b).attr("data-oneislcc"); var two = $(b).attr("data-twoislcc"); var trip1 = $(b).attr("data-oneinfo"); var trip2 = $(b).attr("data-twoin

在我的jquery函数中,我使用服务器端方法进行了两次ajax调用,并且运行良好, 问题是,在ajax代码行运行之后,最后一次调用ajax,但这行代码会继续运行

function Rbook(b) {

var one = $(b).attr("data-oneislcc");
var two = $(b).attr("data-twoislcc");
var trip1 = $(b).attr("data-oneinfo");
var trip2 = $(b).attr("data-twoinfo");
var owflt = "l";
var inflt = 'r';
var owjdata = $(b).attr("data-ow");
var iwjdata = $(b).attr("data-iw");
var llccreturn, rlccreturn;
var lres, rres;
$("#fadeing").css("display", "block");
$("#fade").css("display", "block").css("height", $(document).height / 2);
if (one == 'true') {


    $.ajax({
        type: "POST",
        url: "Search-RoundResult.aspx/FareQuoteMethod",
        data: "{'ALcode':'" + trip1 + "','flt':'" + owflt + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function OnSuccess(response) {
            if (response.d != null) {
                lres = response.d;
                if (response.d == "sessionExpire") {
                }
                else {
                    var data = new Array()
                    data = response.d.split("oldfare=");
                    llccreturn = owlcc(data[0], data[1])
                }
            }
            else {
                alert("Please Try agian.");
            }
        },
        Error: function errer(msg) {
            $("#fade").css("display", "none");
            $("#light").css("display", "none");
            alert(msg.d)
        }

    });

}
else {
    llccreturn = ownonlcc(owjdata);
}
if (two == 'true') {

    $.ajax({
        type: "POST",
        url: "Search-RoundResult.aspx/FareQuoteMethod",
        data: "{'ALcode':'" + trip2 + "','flt':'" + inflt + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function OnSuccess(response) {


            if (response.d != null) {
                if (rres == "sessionExpire") {

                }
                else {
                    var data = new Array()
                    data = response.d.split("oldfare=");
                    rlccreturn = iwlcc(data[0], data[1])

                }

            }
            else {
                alert("Please Try agian.");
            }
        },
        Error: function errer(msg) {
            $("#fade").css("display", "none");
            $("#light").css("display", "none");
            alert(msg.d)
        }

    });

}
else {
    rlccreturn = iwnonlcc(iwjdata);
}

if (llccreturn == 'farechange' || rlccreturn == 'farechange') {
    $("#farechange").css("display", "block");
    $("#fade").css("display", "block");

}
if (llccreturn == 'nofarechange' || rlccreturn == 'nofarechange') {
    window.location = "reviewbooking.aspx?trip1=" + $(b).attr("data-oneinfo") + "&iwlcc=" + $(b).attr("data-oneislcc") + "&trip2=" + $(b).attr("data-twoinfo") + "&owlcc=" + $(b).attr("data-twoislcc");
}}

var owlcc = function (jdata, oldfare) {
//Some Calulation
    retrun 'farechange';
}

var ownonlcc = function (jdata) {     //Some Calulation 
    retrun 'nofarechange'}

var iwlcc = function (jdata, oldfare) {     //Some Calulation 
    return 'farechange'}


var iwnonlcc = function (jdata) { retrun 'nofarechange'}
如果运行此代码,则运行此代码行,然后静止,以便条件不验证 我不知道我哪里做错了

if (llccreturn == 'farechange' || rlccreturn == 'farechange') {
    $("#farechange").css("display", "block");
    $("#fade").css("display", "block");

}
if (llccreturn == 'nofarechange' || rlccreturn == 'nofarechange') {
    window.location = "reviewbooking.aspx?trip1=" + $(b).attr("data-oneinfo") + "&iwlcc=" + $(b).attr("data-oneislcc") + "&trip2=" + $(b).attr("data-twoinfo") + "&owlcc=" + $(b).attr("data-twoislcc");
}

看起来您不理解异步javascript。当您进行ajax调用时,它会发送请求,然后继续运行代码,直到稍后才运行成功处理程序。否则,在响应返回之前,它将无法执行任何操作,因为javascript是单线程的

Rbook
函数执行以下操作:首先,从DOM获取大量信息;然后,发送一些ajax请求(并将处理程序设置为在响应返回时运行);然后可能会根据
llccreturn
rlccreturn
的值对DOM进行一些更改(但它们仍然是
未定义的
)。只有当ajax响应返回并运行成功处理程序时,这些变量才被设置,但到那时已经太晚了

如果您想在听到ajax响应后运行一些代码,请将其放入成功处理程序(或从成功处理程序调用)。在本例中,在两个ajax响应到达之前,您不想运行代码,而且您可能只是同步运行
iwnonlcc
ownonlcc
,而不是执行ajax调用,这使问题更加复杂。我想说解决这个问题的最简单方法是将要在末尾运行的代码包装在函数和
if
块中,如下所示:

function dataWasReceived() {
    if (llccreturn !== undefined && rlccreturn !== undefined) {
        if (llccreturn == 'farechange' || rlccreturn == 'farechange') {
            $("#farechange").css("display", "block");
            $("#fade").css("display", "block");

        }
        if (llccreturn == 'nofarechange' || rlccreturn == 'nofarechange') {
            window.location = "reviewbooking.aspx?trip1=" + $(b).attr("data-oneinfo") + "&iwlcc=" + $(b).attr("data-oneislcc") + "&trip2=" + $(b).attr("data-twoinfo") + "&owlcc=" + $(b).attr("data-twoislcc");
        }
    }
}
然后,每次设置
llccreturn
rlccreturn
的值时,调用此函数:

rlccreturn = iwlcc(data[0], data[1])
dataWasReceived();
以及:

等等

我还担心这一行(出现两次):

您可能希望将参数作为对象应用,而不是表示该对象的JSON字符串:

data: {ALcode: trip2, flt: inflt},

(顺便说一句,你给出的字符串无论如何都不是有效的JSON,因为它使用了
而不是

这是实际的代码还是你重新键入了它?有很多键入错误你应该先修复(重新运行而不是返回等)。我只是删除了不需要的代码,如果有问题,我真的很抱歉,伙计们
data: "{'ALcode':'" + trip2 + "','flt':'" + inflt + "'}",
data: {ALcode: trip2, flt: inflt},