XMLHttpRequest跨域

时间:2014-03-03 09:43:12

标签: javascript xmlhttprequest cross-domain response

我有这个javascript代码从页面提取文本,如果我在我的域中打开文件它工作正常,但我不能从另一个域中的文件获取文本,因为一些安全原因。所以我的问题是如何在javascript中从其他网站提取文本,请不要使用jquery。

谢谢

function reqListener () {
  console.log(this.responseText);
}

var xhr = new XMLHttpRequest();

xhr.onload = reqListener;

xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
        alert(xhr.responseText);
    }
}
xhr.open('GET', 'http://anotherweb.com/datafile.php', true);
xhr.setRequestHeader('Content-Type', 'text/plain');
xhr.send(null);

我尝试了这个并且它不起作用。

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js">

$(document).ready(function(){
  $("button").click(function(){
    $.ajax({
      url: "http://localhost/index.php",
      dataType : "json",
      contentType: "application/json; charset=utf-8",
      cache: false,
      success: function(response) {
        alert(response);
      },
      error: function (e) {                
      }
      });
  });
});
</script>
</head>
<body>
<button>Send an HTTP GET request to a page and get the result back</button>
</body>
</html>

4 个答案:

答案 0 :(得分:7)

如果在Access-Control-Allow-Origin的响应标头中设置datafile.php标头,则可以:)

答案 1 :(得分:1)

您可以将请求发送回服务器,然后将其重定向到您想要的任何位置:

javascript函数:

if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();}
else{// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
xmlhttp.onreadystatechange=function() {
if (xmlhttp.readyState==4 && xmlhttp.status==200) {
document.getElementById("txtHint").innerHTML=xmlhttp.responseText;}}
xmlhttp.open("POST","response.php",true);
xmlhttp.send();

.htaccess文件:

Options +FollowSymLinks
RewriteEngine On
RewriteRule  ^response(.*?)\.php http://example.com/query [R]

javascript函数将在txtHint div中编写example.com的响应。

我是这样写的,因为这是我在我的应用程序中使用它的方式所以我只做了一些小改动。 希望它有所帮助

答案 2 :(得分:0)

您应该使用postMessage来解决跨域限制。

答案 3 :(得分:-1)

您无法进行跨域请求,例如。由于客户端(浏览器)的安全问题,从example1.com到example2.com通过XMLHttpRequest或jQuery(它是XMLHttpRequest的包装器)。这可以在支持HTML5到CORS的现代浏览器中有效实现(跨源资源共享,这在每个客户端浏览器中都不可用)。 因此,解决方案是在example2.com的example1.com中插入脚本标记,此解决方案称为JSON-P(带填充的JSON),名称可能会产生误导,因为数据可以是服务器提供的任何格式(example2.com)。它的实现代码在此链接http://newtechinfo.net/jsonp-for-cross-domain-ajax/

中给出