Jquery.mobile $ .ajax complete被重复调用

时间:2012-08-23 16:56:15

标签: jquery jquery-mobile cordova-2.0.0

我正在使用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次。

任何人都知道为什么会这样?

1 个答案:

答案 0 :(得分:0)

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

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

尝试{throw new Error(“dummy”); } catch(e){alert(e.stack); }

此行将打印一个调用堆栈,并告诉您此函数的调用位置