簡體   English   中英

在JSONP請求中設置響應內容類型標頭?

[英]Setting response content type header in JSONP request?

我有一個使用案例,其中我提出了跨域JSONP請求。

$.ajax({
  url: "http://anyorigin.com/get/?url=<any_website_url>&callback=?'",
  dataType: 'jsonp',
  success: function(data) {
    console.log(data);
}});

一切正常,但我注意到中國網站的數據亂碼。 我對此進行了調試,發現響應頭始終設置為:

Response Header: Content-Type:text/javascript; charset=ISO-8859-1

現在,此字符集ISO-8859-1產生了問題。 應該是UTF-8。 我基本上想始終將此字符集重寫為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。

jsonp請求本質上是使用<script>標記包含的外部javascript文件。 幸運的是, <script> -element具有一個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>

事實證明,這也可以通過設置scriptCharset屬性直接在jQuery.ajax函數opts上scriptCharset

僅在使用“腳本”傳輸時才適用(例如,具有“ jsonp”或“ script” dataType和“ GET”類型的跨域請求)。 在請求中使用的腳本標簽上設置charset屬性。 當本地頁面上的字符集與遠程腳本上的字符集不同時使用。

您是正確的,JSONP不使用XHR對象,它使用script標簽。

但是,這可以通過使用scriptCharset選項的jQuery JSONP包裝器來scriptCharset

摘自jQuery.ajax文檔

scriptCharset

類型:字符串

僅在使用“腳本”傳輸時才適用(例如,具有“ jsonp”或“ script” dataType和“ GET”類型的跨域請求)。 在請求中使用的腳本標簽上設置charset屬性。 當本地頁面上的字符集與遠程腳本上的字符集不同時使用。

scriptCharset: 'UTF-8' jQuery將UTF-8 charset屬性添加到JSONP script標簽中,您scriptCharset: 'UTF-8'在您的AJAX設置對象中添加scriptCharset: 'UTF-8'

示例代碼:

$.ajax({
  url: "http://anyorigin.com/get/?url=<any_website_url>&callback=?'",
  dataType: 'jsonp',
  scriptCharset: 'UTF-8',
  success: function(data) {
    console.log(data);
}});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM