2012-05-02 92 views
9

我在jQuery ajax中有一個簡單的回調函數有問題。谷歌不會幫助和堆棧溢出也不會,所以我想這可能不是特定的東西,而是我太無知看不到的東西。對我來說代碼看起來應該是這樣。爲什麼jquery ajax回調函數不起作用?

所以,這裏是代碼:

function sendMessage(message) 
{ 
//Establish connection to php script 
$.ajax({ 
    type: 'POST', 
    url: 'action/chat/test.php', 
    success: function(feedback){ 

     alert(feedback); 

    } 
}).error(function(){ 
    //Do some error handling here 
}); 
} 

在test.php的它只是說

<?php 
    echo "called"; 
?> 

至於我而言「稱」應警惕 - 但事實並非如此。 我已經檢查過函數sendMessage()被調用(並且參數消息現在無關緊要)。

有沒有人有任何想法?

+0

你有腳本錯誤嗎?檢查螢火蟲控制檯。 – Shyju

+0

如果你在'sendMessage()'的開始處發出提示,它會顯示嗎? – jfriend00

+0

這兩個最有可能的選項:導致AJAX請求不被髮送的Javascript錯誤,或AJAX請求的問題意味着'error',而不是'success',回調函數被執行。使用瀏覽器調試器將是一個不錯的第一步。 –

回答

14

更新:還有一點需要注意的是,確保您使用某種調試器像螢火蟲。然後,您可以轉到網絡選項卡,然後手動查看請求url和響應,以查看它是否獲得200響應或內部服務器錯誤等。

嘗試在您的成功函數中添加console.log(data);以查看是否有任何內容回。

您也可以使用.always(data)

function sendMessage(message) 
{ 
    //Establish connection to php script 
    $.ajax({ 
     type: 'POST', 
     url: 'action/chat/test.php' 
    }).done(function(data) { console.log(data); }) 
    .fail(function() { alert("error"); }) 
    .always(function() { alert("complete"); }); 
} 

從文檔:

取消通知:的jqXHR.success(),jqXHR.error(),和jqXHR.complete()回調將在jQuery 1.8中棄用 。要準備代碼以便最終刪除它們,請改用jqXHR.done(),jqXHR.fail()和jqXHR.always()。

+2

我發現了問題! 從我的apache文件訪問存在一些問題。 Apache不允許閱讀這個文件 - 儘管我只是像往常一樣用Coda創建它。 現在回調起作用。 我剛加入了堆棧溢出,不得不說我對所有快速解答感到不知所措!謝謝! – weltschmerz

+0

還有一點需要注意的是,確保使用某種調試器,比如螢火蟲。然後你可以去網絡選項卡,並手動查看請求url和響應,看看它是否得到200響應或內部服務器錯誤等。 – Fostah

+0

謝謝!我需要什麼。 – weltschmerz

1

這可能是錯誤處理。如果你想處理錯誤,還有另一個屬性可以讓你傳遞給Ajax的對象,這是「錯誤」,也是「超時」處理頁面超時。查看$ .ajax函數,你會發現這些屬性。

+0

當我嘗試使用警報之前的錯誤處理時,它沒有任何警報。現在確實如此。似乎有一些錯誤的PHP文件,雖然路徑是正確的。 – weltschmerz

+1

我發現了這個問題! 從我的apache文件訪問存在一些問題。 Apache不允許閱讀這個文件 - 儘管我只是像往常一樣用Coda創建它。 現在回調起作用。 我剛加入了堆棧溢出,不得不說我對所有快速解答感到不知所措!謝謝! – weltschmerz

4

僅供參考,有一種行爲可能以此結束(即未調用done())。

這就是:

  1. 假設你指望JSON對象(你問它與 「接受」 MIME類型)。
  2. 假設Json字符串無效。

在這種情況下,done()永遠不會被調用,但always()會是。並且在always()中,您將以純文本的形式獲得「嚴重」格式化的答案。