我已经通过ajax成功请求了一个Basecamp XML文件,但它引发了一个错误(在Google Chrome中):
资源解释为其他,但传输的MIME类型为undefined。未捕获的SyntaxError:意外的标记<
Firefox也给我一个错误,但它是一个完全不同的错误。我无法修改XML文件,并且XML文件结构是正确的。我试过并搜索但可以找出问题所在。任何帮助将不胜感激。
这是jQuery代码:
$(document).ready(function() {
$.ajaxSetup({accepts:'text/xml',cache:false});
$.ajax({
type: 'GET',
dataType: 'jsonp',
contentType: 'text/xml',
mimeType: 'text/xml',
crossDomain: true,
url: url,
beforeSend: function(xhr) {
var bytes = Crypto.charenc.Binary.stringToBytes(username+":"+password);
var base64 = Crypto.util.bytesToBase64(bytes);
xhr.overrideMimeType("text/xml;charset=UTF-8");
xhr.setRequestHeader("Authorization", "Basic " + base64);
},
complete: function(xhr, status) {
if (status === 'error' || !xhr.responseText) {
$('.result').html('<p><strong>Error:</strong> ' + status + "</p><p><strong>Response Text</strong>:<br /><pre>"+xhr.responseText+"</pre></p>");
} else {
var data = xhr.responseText;
$('.result').html("<pre>"+data+"</pre>");
}
}
});
});
答案 0 :(得分:1)
通常,问题是您请求的资源不支持JSONP,因此它返回XML文件而不是脚本。当您在ajax请求中指定JSONP时,该函数需要使用javascript包装数据,否则它将无法正常工作。
当然,如果没有JSONP,您无法直接请求XML文件,因为出于安全考虑,浏览器不允许跨脚本访问脚本以外的资源。