2011-12-14 29 views
10

Javascript代碼,使用jQuery 1.7:jQuery的Ajax回調從來沒有所謂的

$(function() { 
    $.get('/ajax_dummy', function() { alert('foo'); }) 
}); 

Firebug的,我可以看到的是,HTTP GET請求被髮送和一個「Hello World」返回代碼爲200的響應,所以一切都顯得精細。但回調從未被調用。

我不知道什麼是錯的;這應該這麼簡單吧?

+7

`$ .get()`將失敗默默。切換到使用`$ .ajax()`與`error`方法,看看是否得到運行。如果確實如此,請查看給出的參數以瞭解發生了什麼問題。 – JAAulde 2011-12-14 18:11:12

回答

8

您沒有提供dataType這樣做的jQuery的內容類型是從響應Content-Type頭,你說的是什麼application/json「智能猜測」。

因此,jQuery將響應視爲JSON,這意味着它會嘗試自動解析它,導致錯誤。

因爲請求引起

$.parseJSON("hello world"); 
"Invalid JSON: hello world" 

成功回調不會明顯被解僱的錯誤。

0

添加此標記

<div id="error"></div> 

然後添加此處理程序來捕獲AJAX錯誤

$("#error").ajaxError(function(event, request, settings){ 
    $(this).append("<li>Error requesting page " + settings.url + "</li>"); 
}); 

或者,你可以重寫這樣

$.get('/ajax_dummy', function() { 
    alert('foo'); 
}).error(function() { 
    // catch error 
}); 
5

原密碼給這個裂口:

$.ajax("/ajax_dummy", { 
    dataType: "text", 
    success: function() { 
     console.log("winning."); 
    }, 
    error: function(jqXHR, textStatus, errorThrown) { 
     console.log(textStatus); //error logging 
    } 
}); 
0

這是因爲根據文檔和$ .get()的語法應該是這樣的

jQuery.get(url [, data] [, success(data, textStatus, jqXHR)] [, dataType]) 

請注意「成功」回調選項。當請求成功時基於狀態碼(200)調用的成功回調。但是您的網址可能不是有效路徑或返回其他狀態代碼(404),意思是「文件未找到」,從而發生錯誤。所以成功的方法從來沒有叫

也沒有用你的語法定義的「錯誤」回調。檢查以下更完整的代碼

$.get("/ajax_dummy", function() { alert('foo'); }) 
    .error(function(d,e) { alert(e); }) 
    .complete(function() { alert("complete"); }); 
相關問題