JSONP 意外令牌 <

Posted

技术标签:

【中文标题】JSONP 意外令牌 <【英文标题】:JSONP Unexpected token < 【发布时间】:2014-02-19 13:40:45 【问题描述】:

我想请求一个远程 XML 文件。我读过 JSONP 是不编写服务器端代码的唯一方法。我正在尝试使用以下代码请求 XML 文件

<html>
<head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
    <script>
        $(document).ready(function()
            $.ajax(
                url: 'http://www.w3schools.com/xml/note.xml',
                dataType: 'jsonp',
                success: function(dataWeGotViaJsonp)
                    console.log(dataWeGotViaJsonp);
                
            );
        )
    </script>
</head>
<body>
</body>
</html>

我得到错误:

资源解释为脚本,但使用 MIME 类型 text/xml 传输:“http://www.w3schools.com/xml/note.xml?callback=jQuery1620008313672617077827_1390902958529&_=1390902958534”。 jquery.min.js:18 Uncaught SyntaxError: Unexpected token

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

您可能正试图通过 JSONP 获取数据以绕过同源策略。

但这也意味着您实际上需要获取 JSONP,而不是 XML。

但你不能只是将dataType 更改为xml,因为上述政策不允许你这样做。

所以服务器需要支持JSONP输出。

解决方案:

您确实需要编写一些服务器端代码。

您可以创建一个服务器端脚本,该脚本可以通过例如 cUrl 访问 xml,并将其转换为 jsonp。

例如:

www.yourserver.com/xmltojson.php?url=http://www.w3schools.com/xml/note.xml

此脚本会将 xml 转换为 json,您可以通过 ajax 调用来获取它。 (因为这个转换是在你自己的服务器上进行的,所以不需要 jsonp,但是普通的 json 就可以了。

编辑:

为你找到了教程:http://weedygarden.net/2011/01/consuming-remote-xml-as-jsonp/

【讨论】:

以上是关于JSONP 意外令牌 <的主要内容,如果未能解决你的问题,请参考以下文章

Jquery ajax响应说“意外的令牌':'”(使用jsonp作为数据类型)[重复]

如何使用 angularjs $http 修复我的 jsonp 回调以解决“意外令牌”错误?

“未捕获的语法错误:意外的令牌:”与 $http.jsonp

jQuery JSONP“未捕获的语法错误:意外的令牌:”

WCF 跨域使用 Jsonp 错误未捕获语法错误:意外令牌:

获取未捕获的语法错误:意外的令牌:读取 jsonp 响应时