尝试从 localhost 向 localhost:8000 发送数据时,ajax 调用不起作用
Posted
技术标签:
【中文标题】尝试从 localhost 向 localhost:8000 发送数据时,ajax 调用不起作用【英文标题】:ajax call not working when trying to send data to localhost:8000 from localhost 【发布时间】:2013-06-21 13:47:52 【问题描述】:当我尝试从 php (localhost)
到 django (localhost:8000)
进行 AJAX 调用时,会引发以下错误。
XMLHttpRequest 无法加载 http://localhost:8000/project/login/uid=bimt;token=KAMWMS151UWP67Q。 Access-Control-Allow-Origin 不允许来源http://localhost。
$(document).on('click', '.login', function(event)
var username = $('#username').val();
var token = $('#token').val();
$.ajax(
type: "POST",
url: "http://localhost:8000/project/login/uid=" + username + ";token=" + token,
success: function (html)
alert(html);
);
);
【问题讨论】:
【参考方案1】:因为端口不一样,所以被认为是跨域请求。
您必须在请求的脚本中设置 Access-Control-Allow-Origin
标头。
了解更多:
http://enable-cors.org/server.html
或者,专门针对 django:
http://chase-seibert.github.io/blog/2012/01/27/using-access-control-allow-origin-to-make-cross-domain-post-requests-from-javsacript.html
【讨论】:
【参考方案2】:1) php 不发出 ajax 请求。 php 在服务器端执行; javascript在客户端执行,是js向服务器发出ajax请求。
2) js 不允许您向与获取当前页面的主机不同的主机发出 ajax 请求。
【讨论】:
【参考方案3】:默认情况下,AJAX 不能发出跨域请求。
你应该参考这个link。
【讨论】:
【参考方案4】:试试,类似:
$('#yourClickButtonId').click(function()
$.ajax(
type: 'POST',
url: 'project/login?uid='+$('#usename')+'&token='+$('#token'),
success: function(data)
alert(data);
);
);
您应该只使用相对路径。
【讨论】:
【参考方案5】:我用我的内部 IP (192.168.1.x) 代替 localhost 并能够在其上调用 XMLHttpRequest。这应该可以解决问题,而不会弄乱跨源策略。
【讨论】:
以上是关于尝试从 localhost 向 localhost:8000 发送数据时,ajax 调用不起作用的主要内容,如果未能解决你的问题,请参考以下文章
从 Android Emulator 向 localhost 发送文件 - 来自 localhost / PHP 文件问题的 301 错误响应
为啥从 localhost 向 localhost 发出请求时会启动同源策略?
通过 Expo 向 localhost 发出 HTTP 请求
CORS 策略已阻止从源“http://localhost:4200”访问“http://localhost:8080/BeginSignup”获取