在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声明,它被评估为假,并且正在跳过在请求标题中设置正确的内容类型。
答案 0 :(得分:2)
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()?你在使用其他任何插件吗?其他一些图书馆可能会行为不端并覆盖您的选择。