2009-05-26 67 views
3

這是我第一次對一個類應用的jQuery給ajaxForm像下面

<form class="ajax_form"...><input type="text" name="q" /><input type="submit" /></form> 
<form class="ajax_form"...><input type="text" name="q" /><input type="submit" /></form> 

<script> 
$('.ajax_form').ajaxForm({ 
    dataType: 'json', 
    error: ajaxErrorHandler, 
    success: function(response) { // do some ui update .. } 
}); 
</script> 

現在,經過Ajax調用完成我總是陷入錯誤部分雖然螢火蟲沒有報告任何錯誤響應不知道是什麼我做錯了。

回答

0

我想你會需要一個URL和發佈類型的表單發送數據的地方?

這是他們如何將它安放jquery.com

$("#myform").ajaxForm({ 
    url: "mypage.php", 
    type: "POST" 
}); 
+0

好吧,我從表單中移除了action =「」,但問題不在提交部分,而是在回調函數中。 – 2009-05-26 06:52:30

+0

和這裏的問題也注意我不使用DOM ID,但類,而我懷疑造成這種奇怪的行爲。 – 2009-05-26 06:53:19

+0

你有沒有試過給一個ID的一個ID,並只打一個更新?這可能會幫助您查看調用多個元素是否存在問題。 – peirix 2009-06-15 05:38:19

1

@ c.sokun:使用一類不應該是一個問題在這裏,只要有1只使用類的形式。兩種形式與同一頁面上的同一類肯定會引起打嗝(請參閱您的代碼...或者是一個錯字?)

您是否嘗試過使用FireBug並檢查傳遞的參數和返回值?這應該是第一個!

+0

我使用類的原因是因爲我有多個表單,我需要將它轉換爲ajaxForm;我檢查FireBug中的響應頭文件是否像預期的那樣是json。 – 2009-05-26 07:02:01

0

ajaxErrorHandler是在別處定義的嗎? 我試過你的代碼,它完美的工作。你使用的是什麼版本的jQuery和jQuery表單?

這是我試過的代碼。隨着一個名爲「test.json」包含「{測試:‘世界你好’}」的文件在同一目錄作爲此測試:

<script type="text/javascript" src="http://malsup.com/jquery/jquery-1.2.6.js"></script> 
<script type="text/javascript" src="http://malsup.com/jquery/form/jquery.form.js?2.28"></script> 

<form class="ajax_form" action="test.json" method="post"><input type="text" name="q" /><input type="submit" /></form> 
<br/> 
<form class="ajax_form" action="test.json" method="post"><input type="text" name="q" /><input type="submit" /></form> 

<script> 
$('.ajax_form').ajaxForm({ 
    dataType: 'json', 
    error: function() {alert("error");}, 
    success: function(response) {alert(response.test);} 
}); 
</script> 
0

嗯,我在API已經檢查,並沒有發現任何參考到選項字段稱爲「錯誤」,所以可能多數民衆贊成的原因。檢查here

1

問題在於你的json數據。這些可能不是很好形成,不能被解析。在這種情況下,不會調用成功函數。

如果您打印錯誤回調的消息,則可以驗證此情況。使用下面的代碼:

url = url + "?" + $(".ajaxForm").serialize(); 
$(".ajaxForm").ajax({url: url, dataType: "json", type : "post", 
        success: function(response) {}, 
        error: function (XMLHttpRequest, textStatus, errorThrown) { 
         console.log(textStatus); 
         console.log(errorThrown); 
        }}); 

打印輸出應該是像「解析器錯誤」的東西。

11

在這種情況下,這可能不適用,但我會提供它,因爲當我尋找類似問題的答案時,它對我有用。如果您在Firefox中通過文件上傳提交「multipart/form-data」表單,jquery.form將使用iframe來提交表單。如果您的返回數據的內容類型是純文本格式,則iframe會將結果文本包裝在<之前>標籤中,這會標記jquery json解析器併爲您提供解析器錯誤,即使Firebug正確顯示響應甚至是json 。

在我想出來之前,這讓我頭痛不已(在此線程的幫助下:http://www.extjs.com/forum/archive/index.php/t-17248.html)。

我的答案是確保響應Content-Type是「text/html」(至少對我來說是違反直覺的)。