我的Sencha Touch 2应用程序有几个地方可以通过点击按钮发出AJAX请求。这是非常标准的东西:
console.log('Saving Billing Item at' + strURL);
Ext.Ajax.request({
url: strURL,
method: 'GET',
success: function (result, request) {
var resultJson = Ext.decode(result.responseText);
console.log('Response from Saving BillingItem:' + result.responseText);
data = Ext.decode(result.responseText);
if(data.ErrorMessage.indexOf("successfully") == -1) {
Ext.Msg.alert('Error!', 'Error saving Billing Item:' + data.ErrorMessage);
} else {
Ext.StoreMgr.get('BillingItemList').load();
Ext.ComponentManager.get('MainMenu').animateActiveItem(23, {
type: 'slide',
direction: 'right'
}); //back to list
}
Ext.ComponentManager.get('BillingItemSaveButton').setDisabled(false);
},
failure: function (result, request) {
Ext.Msg.alert('Error!', 'There was a problem while saving the Billing Item. Please check your input and try again.');
Ext.ComponentManager.get('BillingItemSaveButton').setDisabled(false);
}
});
但请求正在发送到服务器TWICE。
- 点击事件肯定只被解雇一次!
- 如果我手动浏览到strURL中的URL,服务器端功能只会被触发一次,所以它似乎不是服务器端的任何一个。
然而(相同的,除了网址)应用程序中其他地方的ajax请求只会触发一次,我看不出任何差异!
如何跟踪此问题?
答案 0 :(得分:0)
我可以通过在我的服务中从doGet重定向到doPost来重现行为,例如:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("In doGet");
doPost(request,response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("In doPost");
}
结果是:
In doPost
In doGet
In doPost
我记得有些东西只适用于EXTJS中的POST方法,但我现在无法回想起来。话虽这么说,你的servlet不会运行两次,但同时运行doGet和doPost。