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

标签 javascript jquery asp.net ajax asp.net-mvc

我有以下 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() 的第一次(前一次)执行的参数是否会更改?

  • 这样的代码(使用同一个处理程序进行多个 ajax 调用)安全吗?还是会导致一些“脏读”等问题?
  • 有人可以从技术上告诉我,这里发生了什么吗?多线程或者其他什么,堆栈是如何创建的等?

    请帮助我摆脱这种困惑。

    提前致谢!

    最佳答案

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

    唯一的异常(exception)是在函数外部的闭包中定义的数据。例如,如果您有:

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

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

    关于javascript - 多个ajax调用中的参数是否共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41401232/

    相关文章:

    javascript - svelte 组件中的动画

    javascript - React Native onPress 事件延迟

    javascript - 在数据表中的 fnInitComplete 函数内使用 fnDrawCallback

    asp.net - 覆盖 Elmah 记录的错误消息

    javascript - Javascript 中有多维数组类型吗?

    javascript - 在 jQuery 中反转 $.each 输出

    javascript - 如何在 jquery 中初始化字符串中的类或标题

    javascript - 禁用和重新启用功能、静音和取消静音

    javascript - silverlight 内容在 iframe 中不起作用

    javascript - 将变量传递给中继器 imagebutton onclientclick 中的 javascript