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

Javascript Ajax请求在远程服务器中工作,但在本地服务器中不工作(使用Codeigniter),javascript,php,jquery,ajax,codeigniter,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-O

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

您不能使用AJAX向不同的域发出HTTP POST请求,除非该页面允许您使用一个名为“Access Control Allow Origin”的特殊头进行此操作


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

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

localhost与page.com不同,这就是它无法工作的原因。

对的url的响应表示页面执行过程中出现了问题。PHP错误日志应该可以帮助您找到错误所在

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

的url上的响应表示页面执行过程中出现了问题。PHP错误日志应该可以帮助您找到错误所在


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

第二个错误是:
500(内部服务器错误)

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


检查您的错误日志(例如:如果您使用标准灯组,错误日志应该在
/var/log/apache2/
中的某个位置)

第二个错误是:
500(内部服务器错误)

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

检查您的错误日志(例如:如果您使用标准灯组,错误日志应该在
/var/log/apache2/
中的某个位置)

试试这个

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

http://localhost/CI-example/site/index.php/control/controlHome
在您的ajax URL中。 从文件夹结构来看,不需要在URL中包含“站点”

试试这个

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

http://localhost/CI-example/site/index.php/control/controlHome
在您的ajax URL中。
从您的文件夹结构来看,当您向服务器发送ajax请求时,不需要在URL中包含“site”,而返回的是
500(内部服务器错误)
。我确信错误来自服务器端,可能有以下原因-

  • 如果代码中的一切正常,那么可能是您的
    base\u url
    与您请求的内容不同。是的,这可能会导致问题,例如,如果您托管了web应用程序,并且您的
    base\u url
    www.mysite.com
    ,并且您正在请求
    mysite.com
  • 第二个原因可能是,您已经在windows或任何系统中开发了项目,该系统区分大小写,但当您将上载到任何类似linux的服务器时,每个文件名都将区分大小写。例如,假设您给定的模型文件名是
    MyModel.php
    ,但是当您加载模型时,它会生成错误,比如找不到特定的类

  • 在这里,当您向服务器发送ajax请求时,它返回
    500(内部服务器错误)
    。我确信错误来自服务器端,可能有以下原因-

  • 如果代码中的一切正常,那么可能是您的
    base\u url
    与您请求的内容不同。是的,这可能会导致问题,例如,如果您托管了web应用程序,并且您的
    base\u url
    www.mysite.com
    ,并且您正在请求
    mysite.com
  • 第二个原因可能是,您已经在windows或任何系统中开发了项目,该系统区分大小写,但当您将上载到任何类似linux的服务器时,每个文件名都将区分大小写。例如,假设您给定的模型文件名是
    MyModel.php
    ,但是当您加载模型时,它会生成错误,比如找不到特定的类

  • 您是否尝试过AJAX\u URL=“/CI-example/site/index.php/control/controlHome”?您不需要包含主机名,因为AJAX只对内部请求有效。您是否可能有重定向?尝试在单独的选项卡中调用URL,并查看“开发人员工具”的“网络”选项卡。@AustinMullins,我已经尝试过了,错误是最后一个错误question@Thomas. 我想没有redirection@vicenrele,检查塔图的答案:您是否尝试过
    AJAX\u URL=“/CI-example/site/index.php/control/controlHome”
    ?您不需要包含主机名,因为AJAX只对内部请求有效。您是否可能有重定向?尝试在单独的选项卡中调用URL,并查看“开发人员工具”的“网络”选项卡。@AustinMullins,我已经尝试过了,错误是最后一个错误question@Thomas. 我想没有redirection@vicenrele,检查Tatu的回答:如果源请求源于与目标请求域相同的域,则不可能出现该错误。您知道是否存在子域而非域问题吗?如果源请求或