2017-04-10 80 views
0

在Chrome控制檯獲得JSON對象,我能夠執行下面就我的另一個域中找到JavaScript函數:從另一個域

(function() { 
    var scr = document.createElement('script'); 
    scr.src = 'https://www.myawesomedomain.com/test.js'; 
    document.head.appendChild(scr); 
    scr.onload = function(){ 
     myfunc(); 
    }; 
})() 

test.js具有下面的代碼:

let myfunc = function() { 
    alert ('you are awesome'); 
} 

迄今爲止都不錯!

現在我有叫同一個域中的其他文件myjson.json具有以下內容:

{"message":"you are awesome!"} 

,我想修改最初的代碼中提取先前的JSON值,並做了的console.log。我嘗試了下面的代碼,但是由於某種原因它不起作用:

(function() { 
    var scr = document.createElement('script'); 
    scr.type = 'application/json'; 
    scr.src = 'https://www.myawesomedomain.com/myjson.json'; 
    document.head.appendChild(scr); 
    scr.onload = function(){ 
     console.log(scr.message); 
    }; 
})() 

這個。 問題:

我在上面的代碼中做了一些基本的錯誤嗎?我一直在這裏呆了一段時間,悲傷。

+0

使用一個Ajax或HTTP調用到這裏http://stackoverflow.com/questions/13515141/html-javascript-how-to-access解決JSON的URL的詳細信息-json-data-loaded-in-a-script-tag-with-src-set –

+0

** JSON不是Javascript。**(讓它沉入水中,它是基礎)。你不能通過分配它來「執行」它到腳本標記。 – Tomalak

+0

@Tomalak感謝您的回覆!在上面的示例代碼中,json值沒有存儲在scr中?我相信我的理解有問題。我明白,因爲一個內聯腳本可以採用「text/javascript」或「application/json」等類型值,所以'document.createElement'創建的腳本元素也是可行的。還是我想念的執行呢?如果scr變量確實存儲了json文件,scr.message不是獲得「你真棒!」的正確方法。內容?對不起,如果這些是noob /虛擬問題。 – Webeng

回答

0

你需要收集你的函數內響應,這樣的事情,用ajax:

$.getJSON("https://www.myawesomedomain.com/myjson.json", function(result){ 
      console.log(result) 
      }); 
     }); 

收集的結果作爲函數的參數是非常重要的。

更新

如果你要堅持你的方法:

<script type="text/javascript"> 
     $(document).ready(function() { 
     var scr = document.createElement('script'); 
     scr.type = 'application/json'; 
     scr.src = 'https://www.myawesomedomain.com/myjson.json'; 
     scr.onload = myFunction() 
     document.head.appendChild(scr); 
     }) 

     function myFunction() { 
      console.log($(this).message) 
     } 
</script> 

這似乎是工作。你的代碼不工作的原因是你不能動態地嵌入靜態調用。換句話說,你在動態地嵌入一個腳本,然後你需要一個預定義的函數,onload會調用它。正如我在評論中所說的,你的onload沒有被調用。

**更新2 **

雖然上面的代碼調用的onload功能,它可能無法達到你正在嘗試做的。這是不可能的,因爲它打開了一個巨大的安全漏洞。

來源:Read response of a file called with script src tag from external sever

How to access plain text content retrieved via <script type="text/plain" src=...> in JavaScript?

+0

謝謝你的迴應Abhishek!出於幾個原因,我確實需要保持上面使用的代碼的「本質」。我的主要問題是瞭解以前的代碼不工作的原因。我仍然需要爲我的目的使用代碼的'document.createElement'部分。感謝嘗試用另一種方法爲我找到另一種方法:P,但我有興趣找出爲什麼我以前的代碼不工作並希望對其進行調整。你會碰巧知道爲什麼'console.log(scr.message);'不輸出任何東西? – Webeng

+0

Webeng問題是document.createElement不會向您提到的src發送請求。換句話說,.onload()永遠不會被執行。我沒有看到爲此目的使用DOM創建元素。顧名思義,它用於在頁面內創建一個元素。如果你真的想使用你的方法,請嘗試將onload方法附加到其他元素。請考慮標記我的答案,如果它對你有幫助。乾杯! :) –

+0

謝謝你的迴應!然而,我使用的第一部分代碼確實有效,它使用'scr.src'和'scr.onload'來執行異步請求(與您的方法類似)。 – Webeng