我是一个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
答案 0 :(得分:1)
当我到达这里时,你向服务器发送ajax请求而不是返回500 (Internal Server Error)
。我确定错误来自服务器端,可能有以下原因 -
base_url
可能与您请求的内容不同。是的,这可能会导致问题,例如,如果您托管了自己的网络应用程序且base_url
为www.mysite.com
并且您要求mysite.com
。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网址中。
从您的文件夹结构开始,您无需在网址中包含“网站”