【问题标题】:Jquery ajax parametric callback and variable scopeJquery ajax 参数回调和变量范围
【发布时间】:2021-06-13 17:02:40
【问题描述】:

我在 javascript 变量作用域方面不是那么专业,并且遇到了一个问题。

如果我有执行 ajax 调用然后调用我的回调的函数

function doAjaxFunc(param, callback) 
{
  $.ajax({
    type: 'GET',
    url: '/some/url/'+param,
    success: function(data){        
        callback(data);
    },
    dataType:'json'
  });
}

function someCallback1(ajaxResp){
   // DO someting 1
}

function someCallback2(ajaxResp){
   // DO someting 2
}

// exec
doAjaxFunc(1, someCallback1);
doAjaxFunc(2, someCallback2);

由于 ajax 是异步的,并且服务器处理 param=1 的情况可能比 param=2 更长,因此 someCallback1 和 someCallback2 可能不会处理它们的响应。我的意思是回调参数值会以某种方式混合?

如果可能的话,在回答中给出一些解释细节

【问题讨论】:

  • 这取决于您如何定义“混合”。每个都将被调用以获取正确的参数,但不能保证执行顺序,因为请求可以按任何顺序完成
  • @charlietfl under mix 我修正值混合,顺序不重要

标签: javascript jquery scope


【解决方案1】:

我的意思是回调参数值会以某种方式混合?

没有。回调将在原始 AJAX success 处理程序的范围内以完全独立的调用方式调用。任何一个请求都不会交叉污染数据。

另外,顺便说一句,您可以更改此设置:

success: function(data){        
    callback(data);
},

仅此:

success: callback,

【讨论】:

  • 感谢您的回答。所以你的意思是在每个 ajax 成功函数内部只有它的父 doAjaxFunc 函数传递参数才可用,对吗? evan 如果我将 10 个不同的参数传递给 doAjaxFunc(param1,param2 ...)
  • 这个有什么名字吗?这样我就会谷歌并阅读更多内容以了解原因
  • 通用术语是“范围”。这与变量和参数中的上下文有关。不过,您似乎已经从问题标题中知道了这一点:)
  • 好的,谢谢,接受您在答案列表中首先发布的答案
【解决方案2】:

查看这个例子,希望对理解 JavaScript 的作用域有所帮助

var isFirstCall=false;
function doAjax(param)
{
  if(!isFirstCall)
  {
    //for example after do ajax
    var millisecondsToWait = 1000;
    setTimeout(function() {
    console.log(param);  
    }, millisecondsToWait);
  }
  isFirstCall=true;
  console.log(param);  
}

doAjax('first call');
doAjax('second call');

【讨论】:

  • 感谢您的回答。我了解这里发生的事情,但我想了解原因。那么 setTimeoput 和 jquery ajax 以某种方式在精确的变量范围环境中运行,一旦它们的回调触发,只有正确的变量范围可用?怎么叫的?
猜你喜欢
  • 2020-07-22
  • 1970-01-01
  • 1970-01-01
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 2011-11-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多