簡體   English   中英

JS Fetch API和Symfony2 FOSRestBundle

[英]JS Fetch api and Symfony2 FOSRestBundle

目前,我正在嘗試使用Javascript Fetch API從我的Symfony2 FOSRest控制器獲得響應。 在我的控制器中,我使用以下代碼提供響應:

return View::create()
    ->setStatusCode(200)
    ->setData(array('success'=>true));

在我的JS中,我得到了這個:

fetch(url, 'get').then(
    function (response) {
        if (response.status !== 200) {
            console.log('Problem, status: ' +  response.status);
            return;
        }
        response.json().then(function (data) {
            console.log('OK');
            if (typeof callback == 'function')
                return callback(data);
        });
    }
).catch(function (err) { 
    Console.log(err); 
});

結果,我的控制器給了我一個純json,如果我直接在瀏覽器中輸入網址,我可以看到(在Chrome開發工具中的“響應”部分),但是當執行js代碼時,我看到以下錯誤:

未捕獲(承諾)SyntaxError:意外令牌<

這與我從!doctype html開始的初始文件有關。 在調試器中,如果我記錄response.body,則看到它是ReadableByteStream,但不是我的json。 我認為問題出在Symfony中,因為如果我從常規.php文件而不是從RESTFul控制器發送它,我可以讀取json。 任何幫助,將不勝感激。

UPD:當我將response.json()更改為response.text()時,我終於得到了數據))有什么原因嗎? 另外,在我的網址中,我還具有查詢字符串參數(例如?par1 = 1&par2 = 2),我想將該參數傳遞給我的REST控制器,當我再次使用以下方法在瀏覽器中再次輸入網址時得到該參數:

$data = $request->query->get('data');

但是,當我通過JS fetch(在url參數中)傳遞它時,沒有數據傳輸到控制器。 知道在這種情況下該怎么辦嗎? 謝謝

UPD2我的symfony config.yml

fos_rest:
param_fetcher_listener: true
body_listener: true
format_listener: true
view:
    formats:
        json: true
        xml: false
        html: false
        rss: false
    templating_formats:
        json: false
        xml: false
        html: false
        rss: false
    view_response_listener: 'force'

sensio_framework_extra:視圖:{注釋:false}路由器:{注釋:true}

嘗試將其添加到您的配置中:

fos_rest:
    # ...
    view:
        # ...
        formats:
            json: true

如果不起作用,請添加以下內容:

fos_rest:
    # ...
    format_listener:
        rules:
            - { path: '^/yourApiPrefix', priorities: ['json'], fallback_format: json, prefer_extension: false }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM