簡體   English   中英

無法讓 JSONP 與來自外部文件的 javascript 一起使用?

[英]Can't get JSONP to work with javascript from external file?

我正在嘗試使用 JSONP 和標准 javascript 從不同服務器上的外部文件訪問一些 JSON 數據,但我無法讓它工作。 這是我正在使用的腳本,它位於與 json 文件不同的服務器上的 HTML 頁面中。 有人可以幫忙嗎?

<script>

  function jsonCallback(data){
      console.dir(data);
  };

  var script = document.createElement('script');
  script.src = 'http://run.plnkr.co/plunks/v8xyYN64V4nqCshgjKms/data-2.json';
  document.getElementsByTagName('head')[0].appendChild(script);

</script>

編輯
我有一個誤解,我認為問題上的 URL 是由提問者擁有的服務器托管的。 讓我就他所遇到的問題留下我的想法。 所以它在某些環境中有效,而在其他環境中無效。 我試圖重現該問題,但得到“參考:未定義 jsonCallback”。

我的測試環境使用 Webpack 從我的主腳本中制作一個包。 這個包以 IIFE 的方式模塊化了我的主腳本。 所以函數 jsonCallback() 被隱藏在全局范圍之外,這就是我得到參考問題的原因。 此外,當我在 jsfiddle 中測試它時,我遇到了同樣的問題,它使用了 iframe(分離的范圍)。 所以要明確的是,我將主腳本直接放在我的 index.html 中,沒有經過任何編譯過程,並且運行良好,並且按預期調用了 jsonCallback()。

正如下面提到的評論之一,我們沒有足夠的信息來解決它。 但是我要留下這些信息,希望它可以幫助提問者任何機會。


JSONP 是一種非常方便的分配資源的方式,可以避免 CORS 策略問題。 但是,在許多服務器框架中默認情況下並未配置它。

我在處理 Laravel 4.2 時遇到了同樣的問題。 讓我分享我在 Laravel 應用程序上所做的工作,以便您了解如何修復您的服務器。

return Response::json('$response_body'); // Wrong
return Response::json('$response_body')->setCallback(Input::get('callback')); // Good

此外,如果您有其他問題,最好讓我們知道您為服務器使用的框架。 謝謝。

暫無
暫無

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

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