我正在开发一个网站,想要在详细页面中添加结构化数据。问题是,在不知道要添加到JSON-LD脚本的内容之前,我需要请求数据。
我使用Parse作为后端。我也试图寻找教程来实现这一点,但似乎不可能动态添加JSON-LD。
希望有人能帮助我解决这个问题!:)
编辑: 我需要放入JSON-LD的数据响应会在DOM准备就绪后返回。 在这种情况下,它的模式是什么? 我有一个项目列表,当单击其中一个时,我必须首先加载详细页面,但在内容加载完成后,我想通过JSON-LD提供结构化数据。 我还在开始阶段,解决这个问题很难。
编辑2: 这是我的实际实现:
在HTML中:
编辑: 我需要放入JSON-LD的数据响应会在DOM准备就绪后返回。 在这种情况下,它的模式是什么? 我有一个项目列表,当单击其中一个时,我必须首先加载详细页面,但在内容加载完成后,我想通过JSON-LD提供结构化数据。 我还在开始阶段,解决这个问题很难。
编辑2: 这是我的实际实现:
在HTML中:
<body>
// my html page code
...
<script type="text/javascript">
loadDetailPageContent();
</script>
</body>
在JS中:
function loadDetailPageContent() {
// Calling the method here is too early because I don't have info
//writeData();
createDetailPage();
}
function createDetailPage() {
var recipe = Parse.Object.extend("Recipe");
var query = new Parse.Query(recipe);
query.equalTo("objectId", myId);
query.first({
success: function(result) {
// Calling the method here would be perfect
writeData();
},
error: function(error) {
alert("Error: " + error.code + " " + error.message);
}
});
}
function writeData() {
var script = document.createElement('script');
script.type = 'application/ld+json';
script.text = JSON.stringify({
"@context": "http://schema.org",
"@type": "Recipe",
"name": "My recipe name"
});
document.querySelector('head').appendChild(el);
}
如您所见,writeData()方法在两个地方被调用。如果我在一开始就立即调用它,那么使用谷歌结构化数据测试工具时,我可以追踪到所需的结构化数据,没有问题。然而问题在于,此时我还没有创建结构化数据所需的信息,因为需要等待来自Parse的响应。
当我在成功回调中调用该方法时,测试工具无法再检索到数据 :(
window.onload
或$(document).ready()
来等待DOM准备就绪,将创建JSON-LD的部分放在其中。https://dev59.com/A3RA5IYBdhLWcg3w2x6W - Mousey