2010-12-21 45 views
0

我使用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警报打印的数据,而不是显示它的在弹出窗口内,它似乎不再工作。它不打印任何东西。任何人都可以请告诉可能是什么原因?

在此先感谢

回答

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或其他任何的父元素的有效孩子。)

请注意,如果你只是想添加到文档(比较少见,但嘿)的底部,你可以代替parent使用document.body

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

同样,如果你想取代元素的含量,只得到它的一个引用(使用getElementById是如果该元素具有一个ID的便利方式,但也有其他的方式),并更新,而不是附加给它:

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

更重document.writedocument.write实际写入HTML流由HTML解析器解析。当然,一旦页面渲染完成,就不再有HTML流被解析。但是,上面的DOM方法可用于在页面呈现后处理页面上的内容。


题外话:DOM操作和DOM搜索(寻找元素更新)都变得更容易(尤其是更容易的跨浏览器),如果你使用一个库像jQueryPrototypeYUIClosureany of several others这将有语法糖和浏览器偏心率的解决方法等。

1

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