【问题标题】:Codeigniter: AJAX fails to access the controller: Access-Control-Allow-OriginCodeigniter:AJAX 无法访问控制器:Access-Control-Allow-Origin
【发布时间】:2017-06-15 17:25:30
【问题描述】:

所以我第一次尝试使用 Codeigniter。我试图建立一个登录系统。看看这里:http://www.henryspike.tk/udemy/

当您尝试登录时,它应该使用 AJAX 向控制器发送数据,但 chrome 显示错误:

XMLHttpRequest 无法加载 http://www.henryspike.tk/udemy/index.php/main/login。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'http://henryspike.tk' 不允许访问。响应的 HTTP 状态代码为 500。

我搜索了这个问题,发现它与跨域的东西有关。我没有尝试补救措施,因为我认为我不会使用来自另一个域的 AJAX。控制器和视图/jQuery 存在于同一个域中。

是不是因为我在我的域(即 Udemy)的子文件夹中安装了 Codeigniter!我想声明我在 config.php 中将基本 url 正确编辑为 http://www.henryspike.tk/udemy

【问题讨论】:

  • 你能告诉我在哪里添加标题吗?在哪个文件中?
  • 请附上问题的Minimal, Complete, and Verifiable example,以便我们看到而不是猜测。
  • 好吧,访问henryspike.tk/udemy 尝试使用任何电子邮件/密码登录。确保您已打开控制台。然后,只要您单击登录,AJAX 就应该将数据传递给控制器​​。但它没有并返回一个 CORS 错误
  • 你能告诉我根文件夹中的 .htaccess 吗?
  • 我没有 .htaccess 文件。需要注意的一件重要事情是,当我将标题内容添加到我的控制器中时,它一切正常......但我想知道行为背后的原因......因为我在同一个域上,为什么它需要一个控制器前的标头?

标签: php jquery ajax codeigniter


【解决方案1】:

www vs no www 被认为是不同的子域,因此是不同的来源。

使用相对网址

【讨论】:

  • 我在每个 URL 中都添加了“www”....我的每个 URL 都是绝对的,所以这不应该是一个问题
  • 但显示的错误表明您正在非 www 域上打开页面。显示你的 ajax 代码
  • 看看 $(".logBu​​tton").click(function () { $.ajax({ method: "POST", url: "henryspike.tk/udemy/index.php/main/login", data: {email: $ ("#email").val(), 密码: $("#password").val()}, 成功: function (data) { alert(data); } }); return false; });跨度>
  • 好的...里面有www,但是当你打开页面时你没有使用www
  • 我看不懂...请详细说明一下?
【解决方案2】:

Set a header

可能有不同端口的问题,。它们在同一台机器/主机名上并不重要。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-15
    • 2016-04-22
    • 1970-01-01
    • 2014-11-28
    • 2017-06-15
    • 2016-09-30
    • 2015-06-17
    • 1970-01-01
    相关资源
    最近更新 更多