2011-11-14 42 views
1

處理表單帖子返回json響應的最佳做法是什麼?我們正在嘗試在我們網站的移動版本中重新使用一些代碼,該代碼返回JSON,我不確定處理javascript的最佳方式。我想填充一個對話框。我真的必須在form標籤上將data-ajax設置爲false,並調用$ .post嗎?jQuery手機和JSON帖子回覆

感謝, 羅布

回答

0

請問這個帖子幫你?

http://www.giantflyingsaucer.com/blog/?p=2574

也許你能解釋一下多一點點,你是什麼意思與「我真的有數據阿賈克斯設置爲false表單標籤」?如果你想保留AJAX的方式,我想你必須處理你的表單POST,例如$ .post或$ .ajax(參見示例)

7

是的,爲了處理jQuery Mobile中的表單提交,您必須添加data-ajax="false"的表單標籤,所以jQuery Mobile框架將不會爲您處理它。然後,您可以設置自己的處理程序submit事件:

//add event handler to your form's submit event 
$('form').on('submit', function (e) { 
    var $this = $(this); 

    //prevent the form from submitting normally 
    e.preventDefault(); 

    //show the default loading message while the $.post request is sent 
    $.mobile.showPageLoadingMsg(); 

    //send $.post request to server, `$this.serialize()` adds the form data to the request 
    $.post($this.attr('action'), $this.serialize(), function (response) { 

     //you can now access the response from the server via the `response` variable 
     $.mobile.hidePageLoadingMsg(); 
    }, 'json');//you can set the response data-type as well 
}); 

下面是$.post()的文檔:http://api.jquery.com/jquery.post/

注:http://api.jquery.com/on/

1

您:.on()來代替貶值.bind()功能的使用可能需要爲Jasper的示例添加一個.error()處理程序,否則如果在jquery或服務器端存在錯誤,則加載消息將保持在最前,直到用戶刷新頁面,這可能會導致al他輸入的數據。

//add event handler to your form's submit event 
$('form').on('submit', function (e) { 
    var $this = $(this); 

    //prevent the form from submitting normally 
    e.preventDefault(); 

    //show the default loading message while the $.post request is sent 
    $.mobile.showPageLoadingMsg(); 

    //send $.post request to server, `$this.serialize()` adds the form data to the request 
    $.post($this.attr('action'), $this.serialize(), function (response) { 

     //you can now access the response from the server via the `response` variable 
     $.mobile.hidePageLoadingMsg(); 
    }, 'json') //you can set the response data-type as well 
    .error(function(e) { 
     $.mobile.showPageLoadingMsg(); 
     console.log('my_function_name, ' + e.responseText); 
    }); 
});