我正在使用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次。
任何人都知道为什么会这样?
答案 0 :(得分:0)
没有实际代码很难提供帮助,但有些事情你应该尝试......
complete: function(jqXHR, textStatus) {
功能添加提醒。complete
函数是否已被调用18次,还是仅showAllHeaders()
showAllHeaders()
功能尝试{throw new Error(“dummy”); } catch(e){alert(e.stack); }
此行将打印一个调用堆栈,并告诉您此函数的调用位置