如何将JSON-LD从内联移动到文件中?

时间:2015-10-20 12:04:34

标签: json jsonp json-ld

我的HTML文档JSON-LD发布如下:

<script type="application/ld+json">
    {
           "@context": {
               "gs1": "http://vocab.gs1.org/v1#",
               "xsd":"http://www.w3.org/2001/XMLSchema#"
           },
           "@id": "retailer:12345",
           "@type": "gs1:Offering",
           "gtin13":"5011476100111",
           "gs1:hasPrice": {
               "gs1:price": "2.49",
               "gs1:priceTypeCode": "USD",
               "@type":"gs1:Price"
           }
      }
</script>

这可以按预期工作(意味着它使用Google Structured Data Testing ToolStructured Data Linter有效且可见

使用Same Origin Cross Origin),如何将内联JSON-LD移动到文件中?

这种方法失败了:

<script type="application/ld+json" src="_URL_.json"></script>

这种方法也失败了:

<script type="application/ld+json">
        $(document).ready(function(){
            $.ajax({
                url: "_URL_.json",
                dataType: 'json',
                });        
        });
</script>

如何更正我的方法来创建一个解决方案,其中JSON-LD在我的服务器上,而不是在HTML中?

接下来,假设我的网站已启用CORS。

如何以JSONP格式发布JSON-LD结构,以便其他域可以订阅JSON-LD数据?

2 个答案:

答案 0 :(得分:2)

Google Structured Data Testing ToolStructured Data Linter等工具不支持外部参考。可能还有许多JSON-LD的消费者。

如果您仍想这样做,则必须使用link instead of a script element,因为script元素可能没有src function s() { var link = document.createElement('a'); link.download = "test.gif"; link.href = 'http://192.168.20.22/mantis/images/mantis_logo.gif'; document.body.appendChild(link); link.click(); } 属性。

动态包含JSON-LD的变体可能适用于为此目的支持JavaScript的消费者。 (data block;也许只有他们的测试工具无法使用它。)

答案 1 :(得分:1)

您可以动态生成脚本标记:

<script>
  // do some ajax, get the JSON-LD as `data` and then...
  $.ajax(...).done(function(data) {
    var el = document.createElement('script');
    el.type = 'application/ld+json';
    el.text = JSON.stringify(data);
    document.querySelector('body').appendChild(el);
  });
</script>