我尝试从子域向主域发送AJAX GET请求。下面是我的AJAX代码。
$.get('http://my-yii2-website.com/controller/test-method',
{data: '1')},
function(returnedData){
alert(returnedData);
},
'json'
);
以上代码位于子域中。在主域中,我有控制器和操作方法,如下所示。
public function behaviors()
{
$subDomain = 'http://subdomain.my-yii2-website.com';
return [
'corsFilter' => [
'class' => \yii\filters\Cors::className(),
'cors' => [
'Origin' => [$subDomain, ],
'Access-Control-Request-Method' => ['GET', ],
'Access-Control-Request-Headers' => ['*'],
'Access-Control-Allow-Credentials' => null,
'Access-Control-Max-Age' => 3600,
],
],
];
}
public function actionTestMethod()
{
$request = Yii::$app->request;
if($request->isAjax)
{
return json_encode('OK!');
}
else
{
return json_encode('ERROR');
}
}
确实有效。但由于actionTestMethod()中的if语句,它不会将请求视为AJAX请求。它返回预定义的错误'信息。我正在使用Yii framework 2.0。
答案 0 :(得分:0)
isAjax
测试是否存在X-Requested-With
标头,假设任何发出Ajax请求的人都会设置该(非标准)标头。
jQuery将默认为相同的原始请求设置它。它不会为交叉原始请求设置它(因为它是非标准的,正常的CORS设置会拒绝它)。
显式设置或使用其他方法确定请求是否为ajax。
(注意,一般情况下,"是ajax"是一个糟糕的测试,"想要JSON而不是HTML"通常是一个更好的测试,你可以关闭它{{ 3}})