尝试从 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”获取

如何从 docker 容器向 localhost 发出请求?

将 Api 请求从 Android 发送到 Localhost