为什么这个代码与XMLHttpRequest和document.write不起作用?

时间:2010-11-10 20:52:28

标签: javascript ajax

我的代码:

var req = new XMLHttpRequest();
req.open("GET","http://http://surfkid.redio.de/link.php");
req.send(null);
var textout = var.responseText;
document.write(textout);

在文档上,没有文字。

我做错了什么?

3 个答案:

答案 0 :(得分:5)

req.open("GET","http://http://surfkid.redio.de/link.php");
  1. 有一个虚假的额外http://。在任何情况下,除非当前网页本身是由surfkid.redio.de提供的,否则这将不起作用,因为同源策略,所以假设是这种情况,您不需要在以下位置指定服务器名称所有。 (如果情况并非如此,那么您将不得不阅读JSONP。)

  2. 是异步XMLHttpRequest。对此请求的回复将不会立即提供;您必须向req.onreadystatechange添加一个事件监听器。

  3. 另一种方法是将额外的, false参数传递给open(),以获得同步请求。但是,同步XMLHttpRequest通常被认为是一件坏事,因为它会锁定浏览器UI,直到获取响应为止。

    var textout = var.responseText;
    

    您的意思是req

    document.write(textout);
    
    通常最好避免使用

    document.write。例如,如果在内容完全加载后调用它,则会删除当前文档,如果在异步XMLHttpRequest上使用回调,则会出现这种情况。

    更容易将responseText写入元素的innerHTML(假设响应应该是标记;如果没有创建具有给定文本值的Text节点)。

    <div id="redio-link"></div>
    
    <script type="text/javascript">
        // Fix up missing XMLHttpRequest in IE6. You only need to do this once.
        //
        if (!window.XMLHttpRequest && 'ActiveXObject' in window) window.XMLHttpRequest= function() {
            return new ActiveXObject('MSXML2.XMLHttp');
        };
    
        // Fetch link
        //
        var req= new XMLHttpRequest();
        req.onreadystatechange= function() {
            if (this.readyState===4)
                document.getElementById('redio-link').innerHTML= this.responseText;
        };
        req.open('GET', '/link.php');
        req.send();
    </script>
    

答案 1 :(得分:2)

你不能得到var.responseText,你必须从请求中得到它。

同样document.write是一个函数,所以从请求对象传递字符串。

document.write(req.responseText)

但老实说,看看使用像jquery这样的框架,从长远来看,它可以节省你的时间。

$.ajax({ url: "http://http://surfkid.redio.de/link.php", context: document.body, success: function(data){
        document.write(data);
      }});

答案 2 :(得分:0)

:固定代码..你没有处理回复...当我尝试获取你的脚本时,我收到错误,所以我替换了自己的页面。

    var req = new XMLHttpRequest();
    req.onreadystatechange = function() {
        // in case of network errors this might not give reliable results
        if(this.readyState == 4)
            document.write(this.responseText);
    }

    req.open("GET","http://api.fatherstorm.com/test/redio_result.php");
    req.send();