所以我在facebook上的某个用户创建的事件中创建一个数组,我有所有的API工作,除了我不能记录所有内容。由于某种原因写它。
这是我的代码:
for( var i = 0 ; i < response.length ; i++ )
{
if (response[i]['eid'] > 0)
{
document.write([response[i]['name']] + '</br>' + response[i]['description']),
console.log([response[i]['name']] + '</br>' + response[i]['description']);
}
}
当我记录它时,它很好,但我实际上无法在页面上显示它。警告()它也有效。
我有什么想法可以吐出这些变量吗?
答案 0 :(得分:5)
在页面加载后调用document.write时,它会重写当前页面,该页面不包含返回的数据或循环遍历该数据。由于您使用的是FB API,我猜这是在页面加载后运行。尝试使用客户端模板解决方案来呈现所有数据。这样,您就不必进行大量的字符串连接来为您的数据创建HTML。
答案 1 :(得分:0)
如果页面的唯一目的是显示FB api调用的结果,那么只要您的页面设置为有效的HTML并且您的所有javascript都包含在文档的head部分中,document.write应该管用。 document.write通常只在页面加载之前和正文中使用过。页面加载后,文档的整个正文部分将被覆盖并替换。因此,如果您的任何脚本都在正文中,它也将被替换。
在我看来,更好的替代方法是使用div并使用结果填充div。
HTML:
<div id="results">
</div>
使用Javascript:
var results = "";
for( var i = 0 ; i < response.length ; i++ )
{
if (response[i]['eid'] > 0)
{
results += response[i]['name'] + '</br>' + response[i]['description'];
console.log(response[i]['name'] + '</br>' + response[i]['description']);
}
}
document.getElementById("results").innerHTML = results;
编辑:我上面的解释是错误的,如果在页面加载后使用,document.write会重写整个文档。我上面的解决方案仍然是100%有效。
上面接受的答案不是100%正确...下面的代码清楚地表明,即使文档被覆盖,至少已经在全局对象(窗口)中设置的函数和变量也不会丢失,他们还在跑因此,如果您循环遍历已设置的数据,它仍将运行并显示结果,因此问题不仅仅是被覆盖的javascript。
试试这个:
<!DOCTYPE html>
<html>
<head>
<title>hi</title>
<script type="text/javascript">
window.onload = function () {
setTimeout(function () {
for (i = 0; i < 10; i++)
// this runs 3 seconds after the page loads, so after the first iteration
// the entire document is erased and overwritten with 'hi',
// however this loop continues to run, and write() continues to execute,
// showing that the javascript still exists and operates normally.
write();
}, 3000);
};
// this variable will still exist after the page is overwritten
window.someVar = "foo";
// this function still exists and executes after the page is overwritten
function write() {
document.write("hi");
}
</script>
</head>
<body>
<div>
<b>hello</b>
</div>
</body>
</html>