我无法使用jQuery从我的网站(前端)向我的PHP Zend Server应用发送POST请求。他们的存在,我的服务器上单独的应用程序和配置为在两个不同的领域:无法将jQuery POST请求跨域发送到PHP服务器
- site.website
- site.server:8899
最奇怪的是,这是工作,我没有改变(我想!),现在它不工作...所以我希望有人能够提供帮助。
我使用下面的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服务器上下面的代码,使公众目录中在我的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!";
}
我还检查了Apache的access_log和error_log中文件时,我试图使POST请求,并以下线被写入ACCESS_LOG:
127.0.0.1 - - [29 /月/ 2013:12:00:37 0100] “OPTIONS /登录HTTP/1.1” 200 -
127.0.0.1 - - [29 /月/ 2013: 12时01分04秒0100] “POST/HTTP/1.1” 200 6611
而error_log中具有:
[周一年07月29 11时47分36秒2013] [错误] [客户端127.0.0.1 ] PHP注意:未定义索引:电子邮件地址/Library/WebServer/Documents/Site/WebsiteServer/application/controllers/LoginController.php on line 35,referer:http://site.website/
[Mon Jul 29 11:47:36 2013] [error] [client 127.0.0.1] PHP注意:Undefined index:password in /Library/WebServer/Documents/Site/WebsiteServer/application/controllers/LoginController.php在线路36上,引用者:http://site.website/
在客户端,jQuery的落入.error(请求)功能和以下被显示在警报:
{ “readyState的”:0“的responseText “:”“,”status“:0,”statusText“:”error“}
嗨,感谢您的评论。您能否解释为什么OPTIONS和POST请求返回200的状态,那么如果这违反了同一个来源策略?这是我不明白的。另外,我如何修改我的请求以发送正确的标题? 服务器已经向客户端发送了正确的头文件(我相信这是选项请求返回200状态的原因,如果EnableCors功能在服务器上被注释掉了,access_log不会显示OPTIONS行项目 –
请参阅编辑的响应以上... – user619