2017-04-05 44 views
1

我有一個很簡單的Laravel控制器:Laravel無法返回true J​​SON響應

class MyController extends Controller 
{ 
    public function list() 
    { 
     return response()->json(['a' => 'hello']); 
    } 
} 

當我嘗試打開瀏覽器中的一個對應的URL(我使用谷歌瀏覽器),它工作正常。有{"a":"hello"}響應,內容類型爲application/json

但是,當我接收通過javascript數據(我用fetch polyfill)我看到內容類型是text/html。我檢查了它在GoogleChrome DevTools和我的代碼中:

fetch("/list") 
    .then(function(response) { 
     console.log(response.headers.get('Content-Type')); // => 'text/html' 
     return response.json(); 
    }) 
    .then(function(json) { 

    }) 
    .catch(function(error){ 

    }); 

嗯,我得到了錯誤 - Unexpected token < in JSON at position 0

我完全不明白髮生了什麼事。

PS

Laravel版本 - 5.4,PHP版本7.0.15,XAMPP 3.2.2

取填充工具的版本 - 2.0.3

谷歌Chrome瀏覽器版本 - 57.0.2987.133

是的,這聽起來很奇怪,但在MS Edge v.20.10240,它工作正常。

+0

你看過開發工具,看看請求響應什麼?這可能是服務器返回的HTML與數據 –

+0

「我在GoogleChrome DevTools中檢查過它」 - 內容類型是「text/html」。那麼,問題是爲什麼?它應該是'application/json'。 – Sergey

+0

嘗試檢查響應是否可用(您之前做過的同樣的事情,但應該在響應標籤旁邊的標題),每當我看到這個錯誤時,它往往會出於某種原因而從服務器響應html。 –

回答

0

我使用session AUTH我所有路線試圖做到這一點。所以,問題就在那裏。 api路線像下面幫我:

Route::middleware('auth:api')->get('/list', '[email protected]'); 

一個去想。我爲here所描述的所有請求添加了api_token

0

您需要設置json內容類型的請求頭。我不知道關於填充工具,但這是我將如何使用jQuery

$.ajax({ 
       type: 'GET', 
       url: url, 
       contentType: 'application/json; charset=utf-8', 
       success: 
       error: 
      }); 
+0

我試圖做同樣的伎倆。但它沒有區別。 – Sergey

+2

你有沒有試過用郵遞員來打電話? – victor

+1

謝謝@victor!郵差明確表示。我使用身份驗證請求的網址。出於某種原因,我在Chrome中的響應中獲得了授權頁面,但在Edge中沒有。無論如何,現在我知道問題所在。 – Sergey