gpt4 book ai didi

javascript - 回调作为对象属性触发两次传递

转载 作者:行者123 更新时间:2023-12-03 10:56:21 26 4
gpt4 key购买 nike

我有一个样板 ajax 调用,用于从数据库中检索和呈现表。我最初传递了多个参数,这些参数各不相同。为了概括代码,我将它们全部放入一个选项对象中。理想情况下,我也想在选项对象中传递回调,但我发现当我尝试将回调传递到对象中时,它会执行。

参见下面第三行。取消注释时,它会导致回调函数触发。

function wsgiCallbackTableData (actionobj, callback) {
// How I would like to pass the callback in the calling function
//actionobj.callback=callback

// Get the data
actionobj.action = 'gettabledata';
if (!actionobj.hasOwnProperty('start')){
actionobj.start = 0;
}
var starttime = new Date().getTime();
$.ajax({
url: "/wsgireadonly",
type: "post",
datatype:"json",
data: actionobj,
success: function(response){
console.log('SUCCESS: ' + actionobj.tablename)
// Execute our callback function
response = response || {};
var now = new Date().getTime();
response.responsetime = now - starttime;
if (response.hasOwnProperty('etag')){
actionobj.etag = response.etag;
}
callback(response,actionobj);
}
});
}

当我使用类似下面的代码调用上面的内容时,它工作正常:

function GetAndRenderTableData(options){
var callback=RenderTableData;
wsgiCallbackTableData(options, callback)
}

有趣的是,如果我更改对象的名称并将回调分配给随机对象,例如

var arandomobj={}
arandomobj.callback=callback;

一切都很好。因此,当 ajax 获取对象时,它会以某种方式触发包含的函数。

那么如何将函数作为对象方法传递而不执行呢?

最佳答案

导致执行的不是 actionobj.callback=callback。 jQuery 正在做这个。我认为他们想要执行 data 对象内的函数来返回值。

你可以这样做:

function GetAndRenderTableData(options){
var callback= "RenderTableData";
wsgiCallbackTableData(options, callback)
}

然后在ajax成功中执行以下操作:

    if (window[actionobj.callback])
{
window[actionobj.callback](response,actionobj);
}

由于这些函数实际上是窗口的属性,我们可以使用窗口对象来检索它们。

请参阅我的 fiddle 以获取完整的代码。我将成功处理程序更改为错误,因为我无法从 JSFiddle 成功执行 xhr。现在它只会触发一次警报。

http://jsfiddle.net/nvenj38m/

关于javascript - 回调作为对象属性触发两次传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28257720/

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