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

标签 javascript jquery html ajax wsgi

我有一个样板 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/

相关文章:

javascript - Gmail 如何在完成加载后强制自己成为事件选项卡?

javascript - EXTJS 中的列布局

javascript - 无法读取 VUE 中链式 AXIO 事务内的公共(public)数组项

javascript - Ionic 从系统中读取文件并将其放入 Canvas 中

javascript - 远程 JSON 的奇怪行为 Typeahead

jquery - 根据 CSS 或 jquery 中的下一个类名仅隐藏表行中的特定 <td>

html - div 中的文本被下移 - 如何居中?

html - 任何元素内的 &lt;style&gt; 标签仍然有效吗?

jquery - 设置 cookie 弹出窗口

jquery - 更改主体的 css 背景颜色,每次单击按钮