2013-04-08 69 views
1

我沒有在一段時間內使用Ajax,現在我甚至不能得到這個簡單的程序工作,我做錯了什麼?Ajax簡單的例子不工作

 <script type = "text/javascript" src = "jquery-1.9.1.min.js"></script> 
    <script type = "text/javascript"> 
     alert(""); 
     var count = 0; 
     $.ajax({ 
       url: 'get.php', 
       dataType: 'json', 
       success: function() 
       {  
       alert(""); 
       } 
     }); 
     alert(""); 
    </script> 

<?php 
echo "yay"; 
?> 

由於

+0

那麼,會發生什麼?它看起來不像你最容易找出什麼是錯的樣本 – 2013-04-08 19:59:45

+0

請分享一下get.php返回的內容?它是json嗎? – wmfairuz 2013-04-08 19:59:46

+0

@Barry Chapman它似乎只是跳過整個ajax函數 – Crossman 2013-04-08 20:01:32

回答

4

設置dataType爲 「JSON」 是指從get.php響應被解析爲JSON。如果JSON無效或響應爲空,則請求將失敗。

如果URL不正確(無法找到... HTTP 404錯誤),則請求將失敗。

請求的默認type是「GET」,所以如果get.php不允許「GET」(出於某種原因),它將返回一個HTTP錯誤,並且請求將失敗。

如果服務器發生錯誤,它可能會返回HTTP 500錯誤,並且請求將失敗。

幫助調試的一個方法是將error選項添加到$.ajax調用中,並查看是否調用了該選項。相反,我使用.fail()方法...它做同樣的事情。

當然,更直接的調試方式是打開瀏覽器的控制檯並查看AJAX請求。它應該顯示多個關於它的細節,可以幫助你確定任何問題。

看起來好像AJAX請求從未被執行/發送過,因爲在中間沒有看到alert。那麼,僅僅因爲請求不成功,並不意味着它被跳過了。有很多原因(我在上面列出了幾個)爲什麼請求可能會失敗。並且.fail()方法將幫助您確定原因。

此外,在jQuery中處理延遲對象的通用慣例是使用donefail方法,因此這是一個選項。當然,$.ajax具有您可以指定的特定選項(success,errorcomplete - 這是其他用途),所以這也是一個選項。您還可以使用從$.ajax返回的對象的一部分的特殊方法(.success(),.error(),.complete()),但從版本1.8開始已棄用這些方法 - 請查看.ajax文檔,以便查看底部-http://api.jquery.com/jQuery.ajax/。但在這裏是如何我設置它,這不應該是從你的有什麼不同,但確實捕獲錯誤:

$.ajax({ 
    url: 'get.php', 
    dataType: 'json' 
}).done(data) { 
    console.log("successful response"); 
}).fail(jqXHR, textStatus, errorThrown) { 
    console.log("error: " + textStatus + ", " + errorThrown); 
}); 
+0

我不會說「完成」和「失敗」是「約定」。我從來沒有見過任何人這麼說過,而且這絕對不會比把它放在選項論證中。 – Blazemonger 2013-04-08 20:28:57

+0

@Blazemonger我對如何解釋我的觀點感到茫然。出於某種原因,我認爲'成功'/'錯誤'是最近被棄用的屬性(我敢肯定不是真的),但是'done' /'失敗'反正對他們有利(無論出於何種原因)。希望我能記得什麼我談論 – Ian 2013-04-08 20:46:59

+0

@Blazemonger其實是啊,'success','error'和'complete'被棄用的1.8 ......我知道我有一個理由。它位於'ajax'文檔頁面上。 – Ian 2013-04-08 20:54:39

0

確定的jQuery已經通過你的Ajax調用被擊中時加載?

嘗試在準備一個文檔包裹它,以確保您實際加載

$(document).ready(function() { 
    alert(""); 
    var count = 0; 
    $.ajax({ 
     url: 'get.php', 
     dataType: 'json', 
     }).alwaysfunction() { 
      alert("call was hit"); 
     }); 
    }); 

}); 
0

如果有與get.php一個問題,你的代碼將不說明任何問題,jquery.ajax()剛剛吞下錯誤。

甚至在向您的ajax調用添加.failure回調例程之前,您應該能夠檢查執行get.php的Web服務器上的錯誤日誌,並將記錄與執行get.php相關的任何錯誤。