2012-02-07 240 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