打印数据而不是警报

时间:2010-12-21 21:52:56

标签: javascript facebook fbjs facebook-fql

我使用javascript通过javascript sdk从facebook获取一些数据:

window.fbAsyncInit = function() {
    FB.init({appId: '111164862286924', status: true, cookie: true,
             xfbml: true});
/****************************************/

FB.api('/f8', function(response) {
  alert(response.company_overview);
});

/****************************************/
  };
  (function() {
    var e = document.createElement('script'); e.async = true;
    e.src = document.location.protocol +
      '//connect.facebook.net/en_US/all.js';
    document.getElementById('fb-root').appendChild(e);
  }());

这段代码工作正常但是如果我用documen.write更改警告来打印数据而不是在弹出窗口中显示它,它似乎不再起作用了。它不打印任何东西。谁能告诉我们原因可能是什么?

提前致谢

2 个答案:

答案 0 :(得分:3)

在页面的初始解析完成后,您无法使用document.write。幸运的是,没有特别的理由。

如果页面上有一个元素并且您希望附加到该元素,则可以执行以下操作:

var parent = document.getElementById('theId');
var p = document.createElement('p');
p.innerHTML = "This is the <em>new content</em>.";
parent.appendChild(p);

Live example(它不必是p元素,它可以是divspan或其他任何有父元素的有效子元素。)

请注意,如果您只想附加到文档的底部(相对较少,但嘿),则可以使用document.body代替parent

var p = document.createElement('p');
p.innerHTML = "This is the new content.";
document.body.appendChild(p);

同样,如果你想替换元素的内容,只需获取它的引用(如果元素有ID,使用getElementById是一种方便的方法,但有其他方式)并更新它,而不是追加它:

var target = document.getElementById('targetId');
target.innerHTML = "This is the <em>updated content</em>.";

更多re document.writedocument.write实际上写入HTML解析器正在解析的HTML流。当然,一旦页面呈现完成,就不再需要解析HTML流。但上面的DOM方法可用于在呈现页面后操作页面上的内容。


偏离主题:如果您使用像jQuery这样的库,DOM操作和DOM搜索(查找要更新的元素)都变得更容易(特别是跨浏览器更容易) ,PrototypeYUIClosureany of several others,它们具有浏览器怪癖的语法糖和解决方法等。

答案 1 :(得分:1)

如果您希望输出测试值。我推荐用于IE的Console.JS和用于Firefox的Firebug。它们支持一个名为console.log()的函数,它将输出跟踪到调试窗口。