2012-02-07 232 views
0

在JS文件我有這樣的:jQuery.ajaxSetup()被忽略

$.ajaxSetup({ 
    type: 'POST', 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    data: {}, 
    error: function (jqXHR, textStatus, errorThrown) { 
     debugger; 
    } 
}); 

然後再在該文件中我實例化有它的構造AJAX調用填寫一些值的對象。

function RequestViewModel() { 
    var self = this; 
    (...) 
    // Initalization Methods 
    $.ajax({ 
     url:ajaxAddress + 'LoadStates', 
     success: function (data) { 
      debugger; 
     } 
    }); 
} 
var model = new RequestViewModel(); 

但是,當在代碼中進行ajax調用時,'xml'被用作dataType而不是JSON。這導致我的Web服務調用中斷,並且我總是被髮送到AJAX調用的錯誤回調。如果我在實際的Ajax調用中移動設置,則調用將起作用,並從服務器返回數據。出於某種原因,全球環境並未得到尊重。

我的問題是爲什麼這不工作?我幾次使用過這個相同的技術,沒有這個問題。

我正在使用jQuery版本1.7.1。

UPDATE

好像這個問題是jQuery的文件的7517行。它正在執行一個IF語句,該語句被假定爲false,並跳過了在請求頭中設置正確的Content Type。

+0

你確定你的'$ .ajaxSetup()'調用正在執行嗎? – 2012-02-07 21:17:46

+0

這是文件中的第一個呼叫。除非它需要放在.ready()中。 – arb 2012-02-07 21:18:45

+0

雖然不是必需的,但你所有的JS實際上都應該在'.ready()' – KOGI 2012-02-07 21:24:05

回答

2
  • 嘗試把你的.ajaxSetup文檔準備包裝內。(不太可能的原因雖然)
  • 嘗試使用jQuery.ajaxSetup代替$.ajaxSetup
  • 建議全球事件處理程序不會在ajaxSetup。移動error:$.ajaxError(代替:

    jQuery.ajaxError(function (e, jqxhr, settings, exception) { alert(settings.url + " Failed");
    });

例子,如果你有一個日誌類(一個div提出了一些文字,如果發生任何錯誤:

$("div.log").ajaxError(function() { 
    $(this).text("Triggered ajaxError handler."); 
}); 

注意:當你重構,請務必刪除最後一個逗號

另外,如果您使用的是最新版本的jQuery(目前爲1.7.1),則可以簡化:

contentType: "application/json; charset=utf-8", 

contentType: "application/json", 

編輯:快速,骯髒的全球處理器:

$(document).ajaxError(function(e, xhr, settings, exception) { 
    alert('error in: ' + settings.url + ' \\n'+'error:\\n' + exception); 
}); 

EDIT2:一些資源也把被作爲一個空的數據集:(帶引號)

data: "{}", 
+1

是的,這是數據:「{}」'做到了。我在以前的項目中使用過的舊版jQuery中查看了該區域,看起來他們改變了該區域的邏輯,這就是爲什麼使用空白對象不再有效。 – arb 2012-02-08 13:32:32

0

調用.ajaxSetup()在哪裏?你使用其他插件嗎?有可能是其他一些圖書館行爲不端,並且覆蓋了你的選擇。

+0

我也在使用Knockout.js插件,但我認爲這沒有任何影響。 – arb 2012-02-07 21:36:40

+0

我可以確認Knockout不會導致問題。我從網站中刪除它進行測試。 – arb 2012-02-07 21:46:38

+0

然後我懷疑它與已經提到的.ready()包裝器有關。 – KOGI 2012-02-07 21:49:51