gpt4 book ai didi

javascript - JQuery.ajax() 制作设置对象的副本?

转载 作者:行者123 更新时间:2023-11-29 09:54:10 24 4
gpt4 key购买 nike

JQuery.ajax()接受一个 settings 参数。 successerror 的函数(例如)在此对象的上下文中运行。

var arr = [];
var a = {
url : '/',
arbiteraryProperty: 'yeah!',
complete:function () {
console.dir(arr[0]);
}
};

arr.push( a );

$.ajax( a );

运行命令,然后打印 arr 的第一个元素(即 a)的属性,如下所示:

arbiteraryProperty : "yeah!"
url : "/"
complete : function()

现在的问题是上面complete 函数中的this 关键字实际上并不是指settings 对象。这很有趣,因为 JQuery 似乎正在复制 settings 对象。

var arr = [];
var a = {
url : '/',
arbiteraryProperty: 'yeah!',
complete:function () {
console.log(this.arbiteraryProperty );
//this prints 'yeah!'
this.arbiteraryProperty = 'nope!';
console.log( this.arbiteraryProperty );
//this prints 'nope!' so the value of the attribute in this is changed
console.log( a.arbiteraryProperty );
//this prints 'yeah!' ie. the value originally existed in the settings object
}
};

arr.push( a );

$.ajax( a );

问题是:JQuery 真的会创 build 置对象的副本吗?如果是,我如何强制它使用我的对象?

我有一个应用程序,我需要将这些对象保存在一个队列中,并希望它们在运行时得到更新。我想另一种方法是使用 $.ajax()context 设置。但是,没有记录此函数的这种行为(制作设置对象的副本)。还是我错过了?

最佳答案

是的,当您调用 jQuery.ajax() 时,jQuery 会创建一个新的选项对象。结果是您传递的设置对象和全局 jQuery.ajaxSettings 对象的组合,因此您拥有正确的默认值和您在全局设置的任何设置,即使您没有明确在传递的对象中设置它们。

这可以在 source code 中看到对于第 7745 行的 jQuery 1.9:

// Create the final options object
s = jQuery.ajaxSetup( {}, options ),

通常,您使用 context 属性在回调函数中为 this 指定不同的值,因此:

options = {
url: '/',
...,
context: a
}

但是,如果合并执行深层复制,您的情况下的循环引用(a 在其属性之一中引用自身)可能会导致问题。

关于javascript - JQuery.ajax() 制作设置对象的副本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15784581/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com