[英]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.