繁体   English   中英

多个ajax调用中的参数是否共享?

[英]Are parameters in multiple ajax call shared?

我有以下 javascript 函数:

function makeAjaxCall(outerParameter1,outerParameter2,outerDivId,paramInput){
    $.ajax({
    type: "POST",
    url: "some time taking LargeWebMethod or url",   //will take some time in giving output
    data: "{param: " + paramInput+ "}",   
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: successFunction
});
    function successFunction(result){
    var innerParam1 = //some value calculated using result parameter
    var innerParam2 = //some value calculated using result parameter

    htmlString += //some large time consuming code using outerParameter1,  outerParameter2 to generate output

    htmlString += //some large value 

    $("#"+outerDivId).html(htmlString);
    }
}

我们有一个大循环,它多次调用 makeAjaxCall()。

for(var i=0;i<SomeLargeValue;i++){
    var outerParameter1;
    var outerParameter2;
    var id= //some div id that we want to load with some data in next ajax call
    //some code to calculate outerParameter1 and outerParameter2

    var paramToSend = //some value for paramInput parameter in makeAjaxCall()

    makeAjaxCall(outerParameter1, outerParameter2, id, paramToSend)


}

我所知道的是,参数outerParameter1、outerParameter2、outerDivId 和paramInput 在successFunction() 和makeAjaxCall() 中(在范围内)可用。

在successFunction() 中声明的innerParam1 和innerParam2 仅对其自身可用,而在外部无法使用,甚至在makeAjaxCall() 内部也不可用。

以下是我的疑惑。 我很困惑: 1. 当我们使用不同的参数值(来自一个大循环)对 makeAjaxCall() 进行多次异步调用时,将运行不同的进程(不同调用的 successFunction() 代码)。 这些不同的进程是否会共享参数outerParameter1、outerParameter2、outerDivId、paramInput。

我想问的是“假设在第一次调用 makeAjaxCall 之后,代码的执行介于 successFunction() 之间,并且对 makeAjaxCall() 的另一个异步调用使用不同的参数值进行,outerParameter1 和 outerParameter2 参数的值是否会改变对于 successFunction() 的第一次(前一次)执行?

  1. 这样的代码(使用相同的处理程序进行多个 ajax 调用)安全吗? 还是会导致一些“脏读”之类的问题?

有人可以从技术上告诉我,这里发生了什么? 多线程或其他什么,如何创建堆栈等?

请帮助我摆脱这种困惑。

提前致谢!

当你在 Javascript 中定义函数时,你只定义它们一次。 当您稍后调用它们时,无论是正常( foo() )还是作为回调( .done(foo) ),它的处理完全独立于任何先前的调用。

对此的一个例外是在函数外部的闭包中定义的数据。 例如,如果您有:

 function doSomething() {
     var whatever = 1;
     function successFunction() {
         doSomethingWith(whatever);
         changeWhatever();
     }
     function changeWhatever() {
         whatever += 1;
     }
 }

在上面的代码中, successFunction调用影响未来的successFunction调用,因为在函数外部定义的whatever内容,因此“存在”于调用之间。 但除此之外,您无需担心“脏读”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM