JS Fetch api and 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 代码时,我看到以下错误:

未捕获(承诺中(语法错误:意外的令牌<</p>

这与我的初始文件有关,该文件从 !doctype html 开头。在我的调试器中,如果我记录 response.body,我看到它是 ReadableByteStream,但不是我的 json。我认为问题出在 Symfony 的某个地方,因为如果我从常规文件发送它而不是从 RESTFul 控制器发送它,我可以读取我的 json.php。任何帮助将不胜感激。

上级:当我将 response.json(( 更改为 response.text(( 时,我终于得到了数据((有什么原因吗?此外,在我的 url 中,我还有查询字符串参数(如 ?par1=1&par2=2(,我想将其传递给我的 REST 控制器,当我再次使用以下方法直接在浏览器中键入我的 url 时,我会得到这些参数:

$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: 视图: { 注释: 假 } 路由器:{ 注释:真 }

尝试在您的

配置中添加以下内容:

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

如果不起作用,请添加以下内容:

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