2011-06-01 42 views
2
一個$。員額呼叫

我有這樣的腳本,效果很好,但它一直引發「錯誤」的回調,即使沒有任何錯誤:分配回調jQuery的

$(".comment-form").submit(function(e) { 
    e.preventDefault(); 

    var $form = $(this), 
     text = $form.find('textarea').val(); 
     url = $form.attr('action'); 

    $.post(url, { comment: text, 
     beforeSend: function() { 
      alert("before send"); 
     }, 
     error: function() { 
      alert("error"); 
     }, 
     success: function(data) { 
      alert(data);  
     } 
    }); 
}); 

我使用的回調不正確嗎?錯誤回調不應該只在出現ajax錯誤時觸發?

我的意圖是對請求做出反應。如果它有錯誤,我想做點什麼。如果成功,我想要做其他事情,等等......

回答

7

您將回調作爲要發佈的數據的一部分傳遞,因此它們將作爲後期調用的一部分進行評估。試試這個:

$.post(url, { comment: text }, function(data) { 
     alert(data);  
}); 

$.ajax(url, { data: { comment: text }, 
    type: "POST", 
    beforeSend: function() { 
     alert("before send"); 
    }, 
    error: function() { 
     alert("error"); 
    }, 
    success: function(data) { 
     alert(data);  
    } 
}); 
+0

+1可能只是OP的輸入錯誤,但實際上他並沒有爲特定請求添加回調,而是將其結果添加到他發佈的數據中。 – Tadeck 2011-06-01 23:34:52

+0

@Andrew,不應該是'$ .ajax({url:url,comment:text'?我試過你的版本,它的行爲不規律.. – Mohamad 2011-06-01 23:41:57

+0

@Mohamad:從jQuery 1.5開始,URL可以是一個單獨的參數。對於之前的版本,需要按照您的建議進入設置。請參閱http://api.jquery.com/jQuery.ajax/ – 2011-06-01 23:45:06

2

「.post()」方法只允許單個回調(用於「成功」)。如果你想做你正在做的事情,你需要使用「$ .ajax()」。

編輯 —有用downvoter @trey指出(如jQuery的1.5)的的返回值「$ .POST()」呼叫將是可以添加其他處理程序的對象,其中包括處理程序爲「錯誤」(但而不是爲「beforeSend」)。

+0

事實並非如此,見[這裏](http://api.jquery.com/jQuery.post/) – Trey 2011-06-01 23:33:37

+0

@trey,你並不完全正確。可以將「成功」處理程序分配給來自「$ .post()」的**返回值**,但不能像OP那樣將其作爲參數傳入。 – Pointy 2011-06-01 23:35:27

+0

@trey - 似乎鏈接只顯示一次成功回調 – LeeR 2011-06-01 23:35:40

1
$.post("example.php", { comment: "my comment" }, function() { 
    alert("success"); }) 
    .success(function() { alert("second success"); }) 
    .error(function() { alert("error"); }) 
    .complete(function() { alert("complete"); 
    }); 

編輯:添加數據後回調

+0

謝謝。我很好奇,如何在我的例子中將數據傳遞給函數? – Mohamad 2011-06-02 00:31:00

+0

哎呀,你去了 – Trey 2011-06-02 00:43:23