我正在做这样的Ajax请求:
$.ajax({
type: "POST",
url: Routing.generate('check_login_ajax'),
dataType: 'json',
data: {
_username: $('#_username').val(),
_password: $('#_password').val(),
_remember_me: false,
_csrf_token: $('#_csrf_token').val()
}
}).done(function (data) {
console.log(data);
});
php控制器:
public function CheckLoginAjaxAction() {
$request = $this->get('request');
$success = false;
$responseCode = 300;
if ($request->isMethod('POST') && $request->isXmlHttpRequest()) {
$responseCode = 200;
$success = true;
}
$return = json_encode(array('responseCode' => $responseCode, 'success' => $success));
}
我有,在我的xbo.dev网站上:
Object {responseCode: 200, success: true}
我的子域名为blog.xbo.dev:
Object {responseCode: 300, success: false}
所以,我的请求有效,但它不被视为有效的POST
xml请求。
为什么?
顺便说一句,我还有一个小问题。当我从子域发出Ajax请求时,它不会出现在Symfony2调试工具栏中。你知道如何更改它吗?是否可能?
由于
答案 0 :(得分:1)
我假设您正在为您的AJAX调用使用jQuery,在这种情况下,jQuery在检测到跨域请求时会尝试变聪明,并将请求的格式更改为JSONP。 JSONP实际上只是为请求的URL创建一个脚本标记并运行生成的脚本(有关Wikipedia的更多详细信息)。所以进入你的控制器的请求实际上是一个GET而不是一个POST(因为jQuery正在请求一个脚本),这也是它不会作为AJAX请求出现在Symfony工具栏中的原因。
要解决此问题,您应该查看Cross Origin Resource Sharing (CORS),这是专门解决这样的跨域AJAX请求。实现这一点的细节超出了本答案的范围,并取决于您的浏览器支持和JavaScript设置。