0

因此,我从 facebook 上的某个用户创建的事件中创建了一个数组,我让所有 API 的东西都能正常工作,但由于某种原因我不能 document.write 它。

这是我的代码:

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']);
    }
}

当我记录它时,它很好,但我实际上无法在页面上显示它。alert()'ing 它也有效。

有什么想法可以吐出这些变量吗?

4

2 回答 2

5

当您在页面加载后调用 document.write 时,它​​会重写不包含返回数据的当前页面或循环迭代该数据。由于您使用的是 FB API,我猜这是在页面加载后运行的。尝试使用客户端模板解决方案来呈现所有这些数据。这样,您就不必进行一堆字符串连接来为您的数据创建 HTML。

于 2013-01-04T02:16:01.643 回答
0

如果页面的唯一目的是显示 FB api 调用的结果,那么只要您的页面设置为有效的 HTML 并且您的所有 javascript 都包含在文档的头部,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>
于 2013-01-04T02:34:56.920 回答