麻烦“未捕获的SyntaxError:意外的令牌<”

时间:2012-03-27 22:46:59

标签: jquery ajax google-chrome basecamp parse-error

我已经通过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>");
                    }
            }
            });
    });

1 个答案:

答案 0 :(得分:1)

通常,问题是您请求的资源不支持JSONP,因此它返回XML文件而不是脚本。当您在ajax请求中指定JSONP时,该函数需要使用javascript包装数据,否则它将无法正常工作。

当然,如果没有JSONP,您无法直接请求XML文件,因为出于安全考虑,浏览器不允许跨脚本访问脚本以外的资源。