html访问json字段,HTML / Javascript:如何使用src访问在脚本标签中加载的JSON数据

HTML / Javascript:如何使用src访问在脚本标签中加载的JSON数据

我有一个在服务器中生成的JSON文件,我想使其在客户端可见,因为页面可见。 基本上我想实现的是:

我在html文档中声明了以下标签:

源中引用的文件具有JSON数据。 如我所见,数据已经下载,就像脚本一样。

现在,如何使用Javascript访问它? 我尝试使用多种方法来访问带有jQuery和不带有jQuery的脚本标签,以尝试获取我的JSON数据,但是这不起作用。 如果将json数据内嵌在脚本中,则获取innerHTML可能会奏效。 不是,不是我想要达到的目标。

页面加载后的远程JSON请求也不是一种选择,以防您建议这样做。

8个解决方案

96 votes

抱歉,您无法像这样加载JSON。

我知道您在想“为什么我不能在这里只使用

{

name: 'Foo'

}

$(function() {

var x = JSON.parse($('#myJson').html());

alert(x.name); //Foo

});

...简而言之,那就是脚本标签被“滥用”为数据持有人。 您可以使用各种数据来做到这一点。 例如,许多模板引擎利用脚本标签来保存模板。

您有一个简短的选项列表可以从远程文件加载JSON:

使用

编写一个将全局变量设置为json的文件。 (似乎曲棍球)。

将其拉入不可见的iframe中,然后在加载后将其内容抓取(我称之为“ 1997模式”)

咨询巫毒教士。

最后一点:

页面加载后的远程JSON请求也不是一种选择,以防您建议这样做。

...那没有道理。 在处理

Ben Lesh answered 2019-09-22T17:20:12Z

9 votes

另一种解决方案是利用服务器端脚本语言,并简单地内嵌json-data。 这是一个使用PHP的示例:

var jsonData = JSON.parse(document.getElementById('data').textContent)

上面的示例使用了一个额外的脚本标签,其类型为application/json。一个更简单的解决方案是将JSON直接包含在JavaScript中:

具有额外标签的解决方案的优势在于,JavaScript代码和JSON数据保持彼此分离。

Lea Rosema answered 2019-09-22T17:20:51Z

5 votes

看来这是不可能的,或者至少不被支持。

根据HTML5规范:

当用于包括数据块(与脚本相对)时,必须以嵌入式方式嵌入数据,必须使用type属性指定数据格式,不得指定src属性,并且脚本元素的内容必须符合 符合为使用的格式定义的要求。

btx9000 answered 2019-09-22T17:21:30Z

3 votes

虽然目前无法使用script标签,但如果来自相同域,则可以使用iframe。

我这样做是出于娱乐目的,并表明它是“可能的”,但我不建议您使用它。

function someCallback(data){

/** do something with data */

console.log(data);

}

function jsonOnLoad(callback){

const raw = this.contentWindow.document.body.textContent.trim();

try {

const data = JSON.parse(raw);

/** do something with data */

callback(data);

}catch(e){

console.warn(e.message);

}

this.remove();

}

经过镀铬测试,可以在Firefox中使用。 不确定IE或Safari。

kemicofa answered 2019-09-22T17:22:08Z

2 votes

检查以下答案:[https://stackoverflow.com/a/7346598/1764509]

$.getJSON("test.json", function(json) {

console.log(json); // this will show the info it in firebug console

});

L.Grillo answered 2019-09-22T17:22:33Z

2 votes

如果您需要从另一个域加载JSON:[http://en.wikipedia.org/wiki/JSONP]

但是,请注意潜在的XSSI攻击:[https://www.scip.ch/en/?labs.20160414]

如果是同一个域,那么只需使用Ajax。

Vitaliy Kaplich answered 2019-09-22T17:23:11Z

1 votes

我同意本。 您无法加载/导入简单的JSON文件。

但是,如果您绝对希望这样做并且可以灵活地更新json文件,则可以

我-json.js

var myJSON = {

id: "12ws",

name: "smith"

}

的index.html

Karan answered 2019-09-22T17:23:51Z

0 votes

在JavaScript中使用确切json的另一种选择。 由于它是Javascript对象符号,因此您可以直接使用json符号创建对象。 如果将其存储在.js文件中,则可以在应用程序中使用该对象。 当我有一些静态json数据要与应用程序的其余部分分开缓存在文件中时,这对我来说是一个有用的选项。

//Just hard code json directly within JS

//here I create an object CLC that represents the json!

$scope.CLC = {

"ContentLayouts": [

{

"ContentLayoutID": 1,

"ContentLayoutTitle": "Right",

"ContentLayoutImageUrl": "/Wasabi/Common/gfx/layout/right.png",

"ContentLayoutIndex": 0,

"IsDefault": true

},

{

"ContentLayoutID": 2,

"ContentLayoutTitle": "Bottom",

"ContentLayoutImageUrl": "/Wasabi/Common/gfx/layout/bottom.png",

"ContentLayoutIndex": 1,

"IsDefault": false

},

{

"ContentLayoutID": 3,

"ContentLayoutTitle": "Top",

"ContentLayoutImageUrl": "/Wasabi/Common/gfx/layout/top.png",

"ContentLayoutIndex": 2,

"IsDefault": false

}

]

};

DominicTurner answered 2019-09-22T17:24:16Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值