6

When I'm trying to make an AJAX call from php (localhost) to django (localhost:8000), it throws the following error.

XMLHttpRequest cannot load http://localhost:8000/project/login/uid=bimt;token=KAMWMS151UWP67Q. Origin http://localhost is not allowed by Access-Control-Allow-Origin.

$(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);
        }
     });
});
4

5 回答 5

9

因为端口不一样,所以被认为是跨域请求。您必须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

于 2013-06-24T22:07:05.140 回答
1

1) php 不发出 ajax 请求。php 在服务器端执行;javascript在客户端执行,是js向服务器发出ajax请求。

2) js 不允许您向与获取当前页面的主机不同的主机发出 ajax 请求。

于 2013-06-24T22:08:07.140 回答
0

我用我的内部 IP (192.168.1.x) 代替 localhost 并能够在其上调用 XMLHttpRequest。这应该可以解决问题,而不会弄乱跨源策略。

于 2014-09-07T00:08:06.400 回答
0

尝试,类似:

$('#yourClickButtonId').click(function(){
    $.ajax({
        type: 'POST',
        url: 'project/login?uid='+$('#usename')+'&token='+$('#token'),
        success: function(data){
          alert(data);
        }
    });
});

您应该只使用相对路径。

于 2013-06-24T22:25:02.530 回答
0

默认情况下,AJAX 不能发出跨域请求。

你应该参考这个链接

于 2013-06-24T22:07:29.830 回答