我的网页上有以下javascript:
var xhr = new XMLHttpRequest();
xhr.open('GET', 'http://www.google.com', true);
xhr.onreadystatechange = function() {
if (xhr.readyState == 4) {
alert('resp received, status:' + xhr.status + ', responseText: ' + xhr.responseText);
}
};
xhr.send(null);
执行并完成w / readyState为4,状态为0,空responseText和responseXML。我知道它实际上是发送请求b / c我尝试将xhr发送到我的机器上的服务器,而服务器实际上确实做出了响应。为什么我在responseText中没有得到任何东西?它是否有事情要做xhr要去另一台服务器的事实?
当我打开js调试器并输入'xhr'来检查对象时我得到了这个:
的XMLHttpRequest
完成:4
HEADERS_RECEIVED:2
加载:3
开放时间:1
UNSENT:0
abort:function abort(){
addEventListener:function addEventListener(){
dispatchEvent:function dispatchEvent(){
getAllResponseHeaders:function getAllResponseHeaders(){
getResponseHeader:function getResponseHeader(){
onabort:null
onerror:null
onload:null
onloadstart:null
onprogress:null
onreadystatechange:function(){
open:function open(){
overrideMimeType:function overrideMimeType(){
readyState:4
removeEventListener:function removeEventListener(){
responseText:“”
responseXML:null
发送:function send(){
setRequestHeader:function setRequestHeader(){
状态:0
statusText:“”
上传:XMLHttpRequestUpload
withCredentials:false
答案 0 :(得分:16)
它有什么事可做吗? 事实上,xhr将会发生变化 不同的服务器?
是的,您无法通过AJAX向其他服务器发送请求。然而,您可以从服务器端发送您的请求。因此,您需要实现以下工作流程: 您的页面 - >您的服务器 - >第三方服务器 - >您的服务器 - >您的页面,“ - >”意味着发送数据。
答案 1 :(得分:2)
跨站点脚本是将代码注入其他人的网页的常用方法。为了限制这一点,大多数浏览器现在都阻止客户端开发人员创建JavaScript请求(通常通过XMLHttpRequest
)到位于与原始页面不同的域的网页。
您可以通过在您的域上创建一个虚拟脚本来解决此问题,该脚本将相同的请求转发到您实际需要的页面。例如,在您的情况下,您会创建一个http://mydomain.com/google.php
(或您喜欢的任何脚本语言)的请求,然后使用file_get_contents
或类似内容下载Google页面,只需echo
它进行。
答案 2 :(得分:1)
您无法使用javascript执行跨域请求。解决此问题的最佳方法是将您的服务器用作代理。
答案 3 :(得分:1)
如果服务器配置为允许,您可以执行跨域请求:请参阅How does Access-Control-Allow-Origin header work?并google了解Access-Control-Allow-Origin标头。