【问题标题】:XMLHttpRequest responseText is emptyXMLHttpRequest responseText 为空
【发布时间】:2014-02-04 05:52:27
【问题描述】:

我在这个网站上阅读了很多,但我无法解决我的问题! :( 它一定很容易,但它不起作用!

问题是http.responseText 为空。

我正在使用http://www.000webhost.com 上的网络空间

是否可以得到一个Sourcecode为www.google.de的String?

感谢您的帮助!

<html> 
<title>Test Site</title>
<body>
<h1>My Example</h1>
<script type="text/javascript">

var http = new XMLHttpRequest();

http.open("GET", 'https://www.google.de', true);
http.send(null);

http.onreadystatechange = function() {
    alert(http.responseText);
}

alert("The end is reached");
</script> 


<b>Here is some more HTML</b> 
</body>
</html>

【问题讨论】:

  • 你不能用ajax下载其他人的东西,除非他们打开CORS允许它。
  • 如果您尝试向其他域发出请求,则请求返回空(“Access-Control-Allow-Origin”)
  • 查看您的 JavaScript 控制台。阅读您收到的错误消息。
  • 要添加到@Quentin,此类错误来自控制台中的安全错误。如果您关闭或隐藏这些,您将看不到它。

标签: javascript xmlhttprequest


【解决方案1】:

由于同源策略,ajax 不可能,但要解决您的问题,您可以使用 PHP 或 Nodejs 等服务器端编程。基本上 PHP 将在虚拟主机中可用。

创建getGoogle.php

 <?php 
    // create curl resource 
    $ch = curl_init(); 

    // set url 
    curl_setopt($ch, CURLOPT_URL, "www.google.de"); 

    //return the transfer as a string 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 

    // $output contains the output string 
    $output = curl_exec($ch); 

    // close curl resource to free up system resources 
    curl_close($ch);  

    echo $output;    
  ?>

使用你的javascript如下

  <script type="text/javascript">

  var http = new XMLHttpRequest();

   http.open("GET", 'getGoogle.php', true);
   http.send(null);

   http.onreadystatechange = function() {
        alert(http.responseText);
   }

   alert("The end is reached");
   </script>

希望这能解决您的问题。干杯

【讨论】:

  • 我用 cURL 试过了!谷歌只是一个例子。我不能使用 cURL 因为我必须发布用户名和密码,它只适用于 CURLOPT_FOLLOWLOCATION=true!但是 webhoster 启用了安全模式,所以 cURL 不是一个选项! :( 我也许可以用 Javascript 解决它。我认为 CORS 是不允许的,所以有没有办法从其他域获取信息?相信我,我从 3 天开始就在问 googel。
  • 嘿,我得到了 curl 错误的解决方案。使用这个代码pastie.org/7646116,它有一个名为“curl_exec_follow”的函数,你必须使用这个函数而不是curl_exec(用curl_exec_follow替换curl_exec)
  • 您好,感谢您的帮助! Webhost 没有错误,但我只收到“Array”作为字符串,而不是来自站点的 HTML Surcecode。 :( 怎么了?'$result = curl_exec_follow($ch);'
  • 我无法解决我的问题,但它是我问题的正确答案!所以谢谢!
【解决方案2】:

发出客户端 http 请求受到浏览器的限制,只允许来自提供原始页面的同一服务器的请求。这就是所谓的同源策略。

正如其他人所提到的,这通常是通过在服务器端代码中请求 URL 来完成的。

【讨论】:

    猜你喜欢
    • 2011-06-27
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多