我无法使用jQuery从我的网站(前端)发送到我的PHP Zend Server应用程序的POST请求。它们作为我的服务器上的单独应用程序存在,并配置为在两个不同的域上:
最奇怪的是,它正在工作,我没有改变任何东西(我想!),现在它不起作用......所以我希望有人可以提供帮助。
我使用以下JavaScript来发出POST请求:
var login = function(email, password) {
var requestPath = serverPath + "/login";
var params = {
email : email,
password : password
};
$.post(requestPath, params).done(function(response) {
console.log(JSON.stringify(response));
if(isResponseError(response)) {
alert(response.opStatus + ': "' + response.opMessage + '"');
} else {
window.localStorage.setItem("zobyAuthData", JSON.stringify(response));
if(window.localStorage.getItem("zobyAuthData") !== null) {
window.location = 'home.php';
}
}
}).error(function(request) {
console.log(JSON.stringify(request));
alert(JSON.stringify(request));
});
};
我在Zend Server上使用以下代码在公共目录中的index.php文件中启用CORS:
function EnableCors() {
// Allow from any origin
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
echo "You have CORS!";
}
当我尝试发出POST请求时,我还检查了Apache access_log和error_log文件,并将以下行写入access_log:
127.0.0.1 - - [29 / Jul / 2013:12:00:37 +0100]“OPTIONS / login HTTP / 1.1”200 -
127.0.0.1 - - [29 / Jul / 2013:12:01:04 +0100]“POST / HTTP / 1.1”200 6611
error_log有:
[2013年7月29日星期一11:47:36] [错误] [客户端127.0.0.1] PHP注意:未定义的索引:/ Library / WebServer / Documents / Site / WebsiteServer / application / controllers / LoginController中的电子邮件第35行的.php,引用者:http://site.website/
[2013年7月29日星期一11:47:36] [错误] [客户端127.0.0.1] PHP注意:未定义的索引:/ Library / WebServer / Documents / Site / WebsiteServer / application / controllers / LoginController中的密码第36行的.php,引用者:http://site.website/
在客户端上,jQuery属于.error(请求)函数,并在警报中显示以下内容:
{ “readyState的”:0 “responseText的”: “”, “状态”:0 “状态文本”: “错误”}
答案 0 :(得分:0)
是的,这不行! 您在这里违反了相同的原始政策。 为了使其工作,您必须在请求中使用CORS标头。 CORS是一种HTML5功能,它允许XHR请求的跨源请求。
只需访问这些优秀的网站,就此话题进行介绍: http://www.html5rocks.com/en/tutorials/cors/ 要么 https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS?redirectlocale=en-US&redirectslug=HTTP_access_control
编辑: 为了调试设置以下标题
Header set Access-Control-Allow-Origin *
Header set Access-Control-Allow-Headers "content-type"
这应该允许任何页面。另外,请不要忘记“Access-Control-Allow-Headers”字段..
还可以使用FF和Chrome进行调试。两者都对同一问题给出了不同的错误。取决于问题的类型,一个或另一个将提供更多信息。