Ajax请求在远程服务器中工作,但在本地服务器中不起作用(使用Codeigniter)

时间:2013-01-23 13:11:55

标签: javascript php jquery ajax codeigniter

我是一个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

5 个答案:

答案 0 :(得分:1)

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

  1. 如果代码中的所有内容都很好,那么您的base_url可能与您请求的内容不同。是的,这可能会导致问题,例如,如果您托管了自己的网络应用程序且base_urlwww.mysite.com并且您要求mysite.com
  2. 下一个原因可能是,您已经在Windows或任何区分大小写的系统中开发了您的项目,但是当您上传到任何类似服务器的Linux时,每个文件名都区分大小写。例如,假设您给出的模型文件名是MyModel.php,但是当您加载模型时,它将生成错误,例如无法找到特定的类。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

http://www.page.com网址的回复说在页面执行过程中出现了问题。您的PHP错误日志应该可以帮助您找到什么。

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分:0)

试试这个,

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

而不是

http://localhost/CI-example/site/index.php/control/controlHome
在您的ajax网址中。 从您的文件夹结构开始,您无需在网址中包含“网站”