我打开了Firefox的暂存器并输入了......
function ajaxRequest()
{
var xmlhttp;
var domainName = location.host;
var url = 'http://leke.dyndns.org/cgi/dn2ipa/resolve-dns.py?domainName=';
url = url + domainName + '&x=' + Math.random(); // x= to avoid browser caching;
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)
{
alert(domainName+'='+xmlhttp.responseText);
}
}
xmlhttp.open("GET",url,true);
xmlhttp.send();
}
ajaxRequest();
为什么我的ajax代码与远程脚本(http://leke.dyndns.org)在同一个域中工作,但在其他域(如http://stackoverflow.com)中却没有?
如果有帮助,这里是cgi方......
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import os, cgi, cgitb, socket
cgitb.enable()
cgiData = cgi.FieldStorage() # Domain Name
domainName = cgiData.getvalue('domainName')
ipa = socket.gethostbyaddr(domainName)
sendIpa = ipa[2][0]
print 'Content-Type: text/html;charset=utf-8'
print ""
print sendIpa
答案 0 :(得分:2)
不,它不会。这是设计(same origin policy)并且是为了防止cross site scripting攻击。
如果你真的必须使用JSONP,你可以绕过它,但不建议这样做,因为你可能允许另一个网站(即使你信任网站管理员也可能被攻击者攻击)做任何他们喜欢的事情使用登录用户的数据。
答案 1 :(得分:1)
通常情况下无法完成。但如果服务器端代码托管在不同的域
,则可以运行要实现此目的,您必须在服务器站点下面进行更改:
在服务器网站中,您必须将 Access-Control-Allow-Origin
设置为Response Header
Access-Control-Allow-Origin : * //all other domain can access
or
Access-Control-Allow-Origin : <your_domain_name> // only your domain can access
检查:https://developer.mozilla.org/en/http_access_control
[实施例]
您可以对来自不同域的http://xyz.com?x=a
网址进行成功的ajax调用。如果http://xyz.com?x=a
网址的回复标题包含您的域名或“*”的Access-Control-Allow-Origin
字段,则为if和ony。