从另一个域获取JSON对象

时间:2017-04-10 05:14:47

标签: javascript json google-chrome-devtools

在chrome控制台中,我能够执行以下另一个域中找到的以下javascript函数:

EditTextViews

test.js 的代码如下:

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

到目前为止一切都很好!

现在我在同一个域名上有另一个名为 myjson.json 的文件,其中包含以下内容:

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

我想修改初始代码以提取以前的json值并执行console.log。我尝试了以下代码,但由于某种原因它无法运行:

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

此的问题:

我在上面的代码中做了什么基本的错误?我遗憾地被困在这里一段时间。

1 个答案:

答案 0 :(得分: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?