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

时间:2018-01-23 03:47:42

标签: javascript jquery

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

成功回调函数可以很好地到达并读取id变量,但由于ajax调用是非阻塞的,因此id不会更改另一个函数f()调用,在启动后发生ajax请求但在收到回复之前?如何在请求ajax呼叫时保存并传递id

2 个答案:

答案 0 :(得分:2)

  

不会改变另一个函数f()调用

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

考虑以下情况:

let a = 1;

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

change(a);

console.log(a);

此代码将打印2,然后打印1,因为parama的副本,因此更改它不会影响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是引用,而不是原始值。虽然parama的副本,但它是引用的副本,此副本引用相同的对象。

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

但是,如果我们为param分配新值,我们会使用对新对象a的引用覆盖对{field: 7}的引用。由于parama的副本,因此原始对象不受影响。

答案 1 :(得分:1)

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

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