繁体   English   中英

如何将参数传递给Ajax回调函数

[英]Howto pass parameter to ajax callback function

function f(id) {
    $.ajax("http://example.com/example",{
        success:function(data, textStatus, jqXHR){
            $("#"+id).text(data);
        }
    });
}

成功的回调函数可以很好地到达并读取id变量,但是由于ajax调用是非阻塞的,因此id不会随另一个函数f()调用而发生变化,它在启动ajax请求之后但在获得响应之前发生了吗? 如何在请求ajax调用时保存并传递id

不会通过另一个函数f()调用来更改ID

不,因为每次调用一个函数时,都会创建作为参数传递的变量的副本。

请考虑以下情况:

 let a = 1; function change(param) { param = 2; console.log(param); } change(a); console.log(a); 

这段代码将打印2 ,然后1 ,因为param是副本a ,因此改变它不会影响a

将引用传递给对象时,事情变得有些复杂:

 let a = {field: 1}; function change(param) { param.field = 2; // changes the original object field param = {field: 7}; // changes the value of param variable console.log(param.field); } change(a); console.log(a.field); 

控制台将打印7 ,然后打印2 在这种情况下, a是参考,而不是原始值。 虽然param是副本a ,它是引用的副本,而这个副本指的是同一个对象。

因此param.field = 2更改原始对象的field 这就是为什么我们在第二个输出中得到2的原因。

但是,如果我们给param了一个新值,我们a用对新对象{field: 7}的引用覆盖对a的引用。 而且,由于param是副本a ,原来的对象不会受到影响。

不,它不会改变。 它将使用自己的成功回调来启动整个新的ajax请求。 最有可能在第一个更新它之后的某个时间解决它。 即使在服务器返回响应之前再次调用f() ,也是如此。 您的范围将被保留。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop

暂无
暂无

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

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