1

我有一个 Web 应用程序,它使用 Codeigniter-php 代码向服务器发出 Ajax 请求。Ajax 请求在本地服务器中正常工作,但在应用程序托管在远程服务器中时无法正常工作。控制台错误是:

XMLHttpRequest cannot load http://localhost/CI-example/index.php/control/controlHome. Origin http://www.page.com is not allowed by Access-Control-Allow-Origin.

令人惊讶的是,请求是在服务器中发出的,而不是响应中的。

我用于 Ajax 请求的 URL 是:

AJAX_URL = "http://localhost/CI-example/site/index.php/control/controlHome"; 

但是,我也尝试过:

AJAX_URL = "http://www.page.com/CI-example/site/index.php/control/controlHome";

并捕获下一个错误:

POST http://www.page.com/webdom/site/index.php/control/controlHome 500 (Internal Server Error) 

我能怎么做?

编辑:www.page.com 是一个子域。子域用于ajax请求时需要做一些配置吗?

文件夹组织是:

/CI-example
---/application/controllers/control.php
---/system
---/site/js/ajaxRequest.js
4

5 回答 5

1

当我到达这里时,当您向服务器发送 ajax 请求而不是返回时500 (Internal Server Error)。我确定错误来自服务器端,可能有以下原因 -

  1. 如果代码中的一切都很好,那么您的要求可能与base_url您的要求不同。是的,这可能会导致问题,例如,如果您托管了您的 Web 应用程序并且您base_urlwww.mysite.com并且您正在请求mysite.com.
  2. 下一个原因可能是,您已经在 Windows 或任何区分大小写的系统中开发了项目,但是当您上传到任何类似 linux 的服务器时,每个文件名都将区分大小写。例如,假设您给定的模型文件名是MyModel.php,但是当您加载模型时,它会生成类似 Unable to find the specific class 之类的错误。
于 2014-02-06T19:28:33.443 回答
0

http://www.page.com的 url上的响应表明页面执行期间出现了问题。你的 PHP 错误日志应该可以帮助你找到什么。

添加该行ini_set('display_errors', 1)可能会将错误返回到错误处理程序中的 ajax 请求。不要忘记在使用后删除该行,您不希望它在生产代码中存在。

于 2014-02-04T07:01:47.077 回答
0

您不能使用 AJAX 向其他域发出 HTTP POST 请求,除非该页面允许您使用名为“Access-Control-Allow-Origin”的特殊标头来执行此操作。

localhost 与 page.com 不同,这就是为什么这不起作用。

于 2013-01-23T13:14:32.483 回答
0

尝试这个,

http://localhost/CI-example/index.php/control/controlHome

代替

http://localhost/CI-example/site/index.php/control/controlHome

在您的 ajax 网址中。从您的文件夹结构来看,您的 URL 中无需包含“站点”

于 2014-02-06T03:17:30.180 回答
0

第二个错误是:500 (Internal Server Error)

这意味着服务器端出现错误 - 不是跨域策略问题。
这可能是您的 PHP 脚本执行中的错误。

检查你的错误日志(例如:如果你使用标准的 LAMP 堆栈,错误日志应该在某处/var/log/apache2/

于 2014-02-05T09:33:50.077 回答