我有2台本地服务器连接到本地交换机。 Ip地址:192.168.0.10和192.168.0.20。我试图使用jquery Ajax从第二个到第一个获取一些数据,如下所示:
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
$("button").click(function(){
$.ajax({
type: "GET",
url: "192.168.0.20/d",
dataType: '',
success: function(response, textStatus, XMLHttpRequest) {
console.log(response);
window.alert(response);
}
});
});
});
</script>
</head>
<body>
<button id="get-button">Toggle</button>
</body>
</html>
当我把&#34; 192.168.0.20/d"在浏览器网址中,我得到了&#34; data = xyz&#34;正如预期的那样,但是使用上面的方法我得到了确切的脚本,它返回自己(192.168.0.10)而不是192.168.0.20。我该如何解决这个问题?
感谢。
编辑。 以下内容消除了Access-Control-Allow-Origin错误,但返回的数据未出现在消息框中,但它以开发人员模式显示。
$.ajax({
type: "GET",
crossDomain: true,
dataType: "JSONP",
url: "//192.168.0.20/d",
success: function(response, textStatus, XMLHttpRequest) {
console.log(response);
window.alert(response);
}
答案 0 :(得分:2)
您需要将您的网址更改为:
url: "//192.168.0.20/d"
您现在指定的方式是相对网址。换句话说,它将假设您要向当前域发出请求,并且192.168.0.20是您网站的子文件夹。如果你创建了一个超链接,你会遇到同样的问题 - 它不是ajax问题,它是浏览器解释URL片段的方式。这通常可以帮助程序员在不同服务器上将同一站点部署到多个环境(例如dev,test,live)时,因此他们不必仅因为部署位置发生更改而将所有URL替换为指向其他位置。但是,在这种情况下,您完全指向另一台服务器上的资源,因此这种情况不适用。
如果您在其前面放置//
,则表示它是绝对网址(因此始终指向完全相同的位置,无论在何处部署原始网页)斜杠后面的第一部分是域名或IP地址。
(注意//
之前没有http:
或https:
意味着浏览器将使用与当前正在运行的原始网页相同的协议。因此,如果您的网页是通过HTTP它也会通过HTTP发出ajax请求,如果你的页面是通过HTTPS加载的,它将通过HTTPS发出ajax请求。如果这不适合这种情况,那么你可以添加http:
或{{1在适当的时候开始。)
查看https://jsfiddle.net/9uyuj96f/(您的代码)和https://jsfiddle.net/9uyuj96f/1/(固定版本),并在浏览器的网络工具中查看ajax请求以查看差异。