回调作为对象 属性 触发两次
Callback passed as object property fires twice
我有一个样板 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
对象内执行函数到 return 值。
你可以这样做:
function GetAndRenderTableData(options){
var callback= "RenderTableData";
wsgiCallbackTableData(options, callback)
}
然后在 ajax 成功时执行此操作:
if (window[actionobj.callback])
{
window[actionobj.callback](response,actionobj);
}
因为函数实际上是 window 的属性,我们可以使用 window 对象检索它们。
查看我的 fiddle 以获取完整代码。我将成功处理程序更改为错误,因为我无法从 JSFiddle 成功执行 xhr。它现在只会触发一次警报。
我有一个样板 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
对象内执行函数到 return 值。
你可以这样做:
function GetAndRenderTableData(options){
var callback= "RenderTableData";
wsgiCallbackTableData(options, callback)
}
然后在 ajax 成功时执行此操作:
if (window[actionobj.callback])
{
window[actionobj.callback](response,actionobj);
}
因为函数实际上是 window 的属性,我们可以使用 window 对象检索它们。
查看我的 fiddle 以获取完整代码。我将成功处理程序更改为错误,因为我无法从 JSFiddle 成功执行 xhr。它现在只会触发一次警报。