2015-12-09 66 views
2

我使用ajax在yii2中開發一個搜索欄。問題是Yii::$app->request->isAjax屬性總是返回falseYii2:isAjax返回false

這是我的行動:

public function actionAjaxsearch() 
{ 
    if(Yii::$app->request->isAjax) 
    { 
     $keywords = Yii::$app->request->queryParams; 
     Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 
     return [ 
      'data' => $keywords, 
      'code' => 200 
     ]; 
    } 
    else throw new \yii\web\HttpException(404, 'Page not found.'); 

這是我的腳本:

$('#search-box').keyup(function(event){ 
    event.preventDefault();  
    $.ajax({ 
     url: 'http://localhost/items/ajaxsearch', 
     data: {keywords: $('#search-box').val()}, 
     type: 'GET', 
     dataType: 'json', 
    }).done(function(){ 
     console.log('success'); 
    }).fail(function(data){ 
     alert(data); 
    }).always(function(){ 
     alert('finished'); 
    }) 
}); 

如果我不使用ifYii::$app->request->isAjax控制器只呈現帶有數據的JSON。

P.D #search-box的內容已成功通過。

編輯@SilverFire

不要有一些垃圾堆

["HTTP_X_REQUESTED_WITH"] => not defined, 
["HTTP_ACCEPT"]=> string(74) "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", 
["CONTENT_TYPE"] =>not defined, 
["HTTP_CONTENT_TYPE"] =>not defined, 
["REQUEST_METHOD"]=> string(3) "GET", 
["HTTP_X_HTTP_METHOD_OVERRIDE"] =>not defined, 
+0

你能證明你的'$ _SERVER'傾倒? – SilverFire

+0

@SilverFire你需要看到任何特定的變量?我在工作中在開發服務器上進行編程。所以我寧願不顯示所有$ _SERVER – Sageth

+0

夠公平。您可以顯示HTTP_X_REQUESTED_WITH,HTTP_ACCEPT,CONTENT_TYPE,HTTP_CONTENT_TYPE,REQUEST_METHOD,HTTP_X_HTTP_METHOD_OVERRIDE – SilverFire

回答

1

那麼,你的瀏覽器因爲某些原因HTTP_X_REQUESTED_WITH頭不會發送到服務器。

據猜測它可能涉及:Missing X-Requested-With: XMLHttpRequest (causes 200 OK But Shows as Error?)Cross-Domain AJAX doesn't send X-Requested-With header

+0

我試着在ajax請求中添加'X-Requested-With'頭,但仍然不起作用。 – Sageth

+0

在ajax請求中添加它之後,您是否在PHP端看到此頭文件? – SilverFire

+0

是的,'HTTP_X_REQUESTED_WITH'沒有被定義。 – Sageth