2017-04-10 60 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