2011-11-09 111 views
1

[name = AddClientSubmit] ...是表單上的「submit」按鈕。jQuery Click - POST/GET return success'返回值

$ .POST發送表單數據,並且發佈腳本返回一個帶有錯誤消息的json響應。

如果沒有錯誤消息,我希望將click函數返回爲true,以便表單被提交,並在出現錯誤時返回false。

下面我的腳本問題是javascript不會等待$ .POST完全完成,並且submitForm值從不設置,因此表單會自動提交。

$('[name="addClientSubmit"]').click(function() { 
    var submitForm = false; 
    var buttonObj = $(this); 
    buttonObj.hide(); 

    $.post(
     '/jquery/scripts/contacts_clientAddEdit.php', 
     $('#addClientForm').serialize(), 
     function(json) { 
      if(json.error == '') { 
       submitForm = 'yes'; 
      } else { 
       jAlert(json.error, 'Error', function() { 
        buttonObj.show(); 
       }); 
       submitForm = 'no'; 
      } 
     }, 
     'json' 
     ); 

     if(submitForm == 'yes') { return true; } 
     if(submitForm == 'no') { return false; } 
    }); 

回答

1

的問題是,$。員額方法是異步的,因此會返回之前提交完成。有一種方法可以關閉此功能,但會導致瀏覽器掛起,有時候會像用戶崩潰一樣對用戶表現出錯。

而不是創建兩個單獨的帖子,一個用於此AJAX功能,另一個用於表單爲什麼不組合它們?這將解決您的問題,併爲用戶帶來更快的響應時間。

+0

不幸的是事物的方式是建立這個「新客戶」的形式在幾個不同的管理部分中使用。表單提交後,每個管理部分都會將用戶重定向到其他頁面。所以基本上這個AJAX調用只是通過POST驗證表單。我希望有另一個工作。我想我可以通過管理部分類型,只是返回POST成功函數可以處理的重定向URL。 – bbullis

+0

「我想我可以通過管理部分類型,只是返回POST成功函數可以處理的重定向URL。」我認爲,「我猜」你認爲這可能是一種黑客攻擊,但我向你保證它不是。服務器端重定向仍然會將URL返回給客戶端,它只是由瀏覽器自動處理。讓這個機制被javascript處理沒有什麼根本性的錯誤。 –

+0

感謝您的幫助!我並不認爲這是一種破解,我只是一直在這個項目上工作很長時間,所以我希望我的第一個思考過程是正確的答案,因爲我沒有改變/重新編碼事物的心情。 – bbullis

2

您可以通過這種方式修改代碼實現這一點:

$('[name="addClientSubmit"]').click(function() { 
var submitForm = false; 
var buttonObj = $(this); 
buttonObj.hide(); 

$.post(
    '/jquery/scripts/contacts_clientAddEdit.php', 
    $('#addClientForm').serialize(), 
    function(json) { 
     if(json.error == '') { 
      submitForm = 'yes'; 
      return true; 
     } else { 
      jAlert(json.error, 'Error', function() { 
       buttonObj.show(); 
      }); 
      submitForm = 'no'; 
      return false; 
     } 
    }, 
    'json' 
    ); 

}); 
+0

該方法不起作用,因爲返回true或返回false不會在$ .POST成功函數之外執行。 – bbullis

+0

您可以使用stop()和submit()函數使其以不同的方式工作。例如,在成功函數中執行$('#addClientForm')。submit()。 – Salman