我正在对Web服务进行ajaxSubmit调用,它将返回XML。
当我使用XMLHttpRequest.send调用同一服务时,响应是正确的。 但是,如果我使用:
$(form).ajaxSubmit({
error: function _(response) {
$(iframeEl).remove();
config.error.call(scope, Thunderhead.util.JSON.decode(response));
},
success: function _(response) {
console.log(response);
$(iframeEl).remove();
var result = response;
config.success.call(scope, result);
},
iframe: true
});
这将返回正确的XML响应,但所有标记都已转换为小写。
我已经在开发者控制台的“网络”选项卡中检查了调用,并且案例在那里是正确的,但是当ajaxSubmit返回时,它是小写的。
有谁知道造成这种情况的原因或如何纠正它?
答案 0 :(得分:1)
您使用的是Malsups jQuery form plugin
吗?这个插件做了很多toLowerCase转换,我看起来并不太紧,但似乎小写了某些东西的标签名称,所以这可能是你的罪魁祸首。
我建议您使用简单的jQuery.ajax()调用重构
$(form).on('submit', function(e) {
var url = $(form).attr('action');
e.preventDefault();
$.ajax( url, {
error: function _(jqXHResponse) {
// your code
},
success: function _(response) {
console.log(response);
// your code
}
});
答案 1 :(得分:0)
这可能会发生,因为js假设xml作为答案。大多数xml-parsers没有区别,在xml标记名称中使用了这种情况。
我建议尝试更改响应数据类型。
例如,jQuery.ajax方法中有这样的选项:http://api.jquery.com/jquery.ajax/(名为dataType)。如果案例非常重要,我会尝试使用“text”dataType。
答案 2 :(得分:-1)
最后还会出现一些问题,所以只要发布我的最终解决方案以防其他人遇到此问题。我对javascript很新,所以对大多数人来说这可能是显而易见的,但它可能会帮助其他人。
成功回调实际上可以接受3个参数,其中第三个参数(arg2)是来自请求的实际响应,而没有来自Malsups表单插件的任何更改。
所以最后,解决方案只是使用第三个参数而不是响应参数。
$(form).ajaxSubmit({
error: function _(response) {
$(iframeEl).remove();
config.error.call(scope, Thunderhead.util.JSON.decode(response));
},
success: function _(response, arg1, arg2) {
console.log(response);
$(iframeEl).remove();
var result = response;
config.success.call(scope, arg2.responseXML);
},
iframe: true
});