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);
        }
     });
});
Pavindu
  • 2,684
  • 6
  • 44
  • 77
user1001176
  • 1,156
  • 3
  • 15
  • 36

5 Answers5

9

Because the port is not the same, it's considered a cross origin request. You must set a Access-Control-Allow-Origin header in the script you are requesting.

Learn more:

http://enable-cors.org/server.html

or, specifically for django:

http://chase-seibert.github.io/blog/2012/01/27/using-access-control-allow-origin-to-make-cross-domain-post-requests-from-javsacript.html

Tamás Pap
  • 17,777
  • 15
  • 70
  • 102
1

1) php does not make ajax requests. php executes on the server side; javascript executes on the client side, and it is js that makes ajax requests to the server.

2) js does not allow you to make ajax requests to a different host than the one from which the current page was obtained from.

7stud
  • 46,922
  • 14
  • 101
  • 127
0

AJAX, by default, can't make cross-domain requests.

You should refer to this link.

Community
  • 1
  • 1
Rafa Jaques
  • 115
  • 7
0

Try, something like:

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

You should just use a relative path.

StackSlave
  • 10,613
  • 2
  • 18
  • 35
0

I swapped my internal IP (192.168.1.x) in the place of localhost and was able to call a XMLHttpRequest on it. This should do the trick without messing with cross origin policy.

Kunal
  • 1,125
  • 2
  • 11
  • 18