【问题标题】:Jquery.mobile $.ajax complete gets called repeatedlyJquery.mobile $.ajax complete 被重复调用
【发布时间】:2012-08-23 16:56:15
【问题描述】:

我正在使用 jquery.mobile-1.1.1.min.js 和 cordova-2.0.0.js (phonegap)。

在我的 $.ajax 调用设置中,我将参数设置如下:

  success: onFetchOK,   // saves everything to the database
  complete: function(jqXHR, textStatus) {
      // show everything in the database
      showAllHeaders();
  },
  error: function(xhr, textStatus, errorThrown) {
      alert("onFetchFailure: There was an error retrieving messages: \n"
            +"xhr: " + xhr.statusText 
            +"\nstatus: " +textStatus 
            +"\nerror: " +errorThrown.message);
      $('#fetch-result').html(textStatus);
  },

函数 onFetchOK 从服务器获取 18 个消息头,每个消息头都有一个主题和一个日期/时间,这些都使用 phonegap webdb 存储 API 存储在 webdb 中。

如果我删除并重新创建消息表并重新运行应用程序,那么对于我收到的 18 条消息中的每条消息都会调用一次 complete: 函数,因此会显示 342 个消息标头 (18x18+18)。

在我的代码中除了这个之外没有其他地方完整:showAllHeaders();被调用。

我在 showAllHeaders() 中放置了一个警报,该警报被触发了 18 次。

为了进一步缩小这个范围,我在我的成功中放置了一个循环计数器:onFetchOK(),如下所示:

var loopCount = 0;
// process each message
$.each(json.messages, function(index, msg)
{        
    // save each alert before displaying it
    webdb.addAlert(msg.msg_id, msg.title, msg.when);
    loopCount++;
});
alert("loopCount = " +loopCount);

当这个警报被调用时,它会显示“loopCount = 18”并且这只会被调用一次。

如果我退出应用程序,重新加载它并且没有从服务器拉取新消息,那么会显示 18 个消息头,这正是它应该的样子。

所以,我的 complete: function() 似乎被重复调用了......一次应该被调用,然后又被调用了 18 次。

有人知道为什么会这样吗?

【问题讨论】:

  • 发布的信息不够。请发布整个 AJAX 脚本和启动 AJAX 调用的代码。
  • @ppetree,您是否尝试按照我的建议进行调试?如果是,您能发布更多信息吗?

标签: jquery jquery-mobile cordova-2.0.0


【解决方案1】:

没有实际代码很难提供帮助,但有些事情你应该尝试......

  • complete: function(jqXHR, textStatus) { 函数添加警报。
    这将帮助您验证 complete 函数是否已被调用 18 次或只是 showAllHeaders()
  • 通过 firefox 访问页面,进入 firebug 屏幕,站在“net”选项卡上并选择 XHR
    在 XHR 下,您可以看到所有服务器响应,包括返回的数据。
    验证返回的数据是否符合预期
  • 将以下行添加到您的 showAllHeaders() 函数

try { throw new Error("dummy"); } 捕捉 (e) { 警报(e.stack); }

这一行将打印一个调用堆栈,并告诉你这个函数是从哪里被调用的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 2012-09-26
    • 2011-07-05
    • 2019-06-10
    • 2011-02-05
    • 1970-01-01
    • 2013-12-07
    相关资源
    最近更新 更多