jQuery.ajaxSetup()被忽略了

时间:2012-02-07 21:13:54

标签: javascript ajax jquery

在JS文件中我有这个:

$.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。

更新

似乎问题出现在jQuery文件的第7517行。它正在做一个IF声明,它被评估为假,并且正在跳过在请求标题中设置正确的内容类型。

2 个答案:

答案 0 :(得分: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 :(得分:0)

在哪里调用.ajaxSetup()?你在使用其他任何插件吗?其他一些图书馆可能会行为不端并覆盖您的选择。