0

私のSenchaTouch2アプリには、ボタンのクリックで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);
    }
});

ただし、リクエストはサーバーに2回送信されています。

-タップイベントは間違いなく一度だけ発砲されます!

-strURLのURLを手動で参照すると、サーバー側の関数が1回だけ起動されるため、サーバー側の関数ではないように見えます。

ただし、(URLを除いて、同じですが)アプリの他の場所でのajaxリクエストは1回だけ発生し、違いはわかりません。

これを追跡するにはどうすればよいですか?

4

1 に答える 1

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メソッドにのみ適用できるものを覚えていますが、今は思い出せません。そうは言っても、サーブレットは2回実行されませんが、doGetとdoPostの両方を実行します。

于 2014-06-13T08:33:53.613 に答える