我有一个用例,我在其中制作跨域JSONP请求。
$.ajax({
url: "http://anyorigin.com/get/?url=<any_website_url>&callback=?'",
dataType: 'jsonp',
success: function(data) {
console.log(data);
}});
它工作正常,但我注意到中国网站的数据出现乱码。我对此进行了调试,发现response-header始终设置为:
Response Header: Content-Type:text/javascript; charset=ISO-8859-1
现在这个charset ISO-8859-1正在创建一个问题。应该是UTF-8。我基本上想要总是将这个charset覆盖为UTF-8。我知道我可以使用ajax来做到这一点。我尝试使用以下代码 -
$.ajax({
url: "http://anyorigin.com/get/?url=www.google.com&callback=?'",
dataType: 'jsonp',
beforeSend: function(xhr) {
console.log(xhr);
xhr.overrideMimeType("text/javascript; charset=utf-8");
},
success: function(data) {
console.log(data);
}});
但这并没有解决问题。我猜测由于JSONP请求不使用XHR对象,这将无法正常工作。
有谁能告诉我如何实现这一目标或者是否可以实现? TIA。
答案 0 :(得分:3)
jsonp请求本质上是使用<script>
标记包含的外部JavaScript文件。幸运的是,<script>
- 元素具有charset
属性,您可以设置UTF-8
。这看起来像
<script
src="http://anyorigin.com/get/?url=<any_website_url>&callback=myCallbackFunction"
charset="UTF-8"
></script>
其中先前已定义myCallbackFunction
,并将使用请求的数据进行调用。所以你得到的是
<script>
window.myCallbackFunction = function(data){
}
// Dynamically insert the previously describe <script> tag here.
</script>
事实证明,通过设置jQuery.ajax
属性,scriptCharset
函数opts也可以直接执行此操作。
仅适用于&#34;脚本&#34;使用传输(例如,使用&#34; jsonp&#34;或&#34;脚本&#34; dataType和&#34; GET&#34;类型)的跨域请求。设置请求中使用的脚本标记的
charset
属性。当本地页面上的字符集与远程脚本上的字符集不同时使用。