JS Fetch api和Symfony2 FOSRestBundle

时间:2016-02-03 15:35:17

标签: javascript php json symfony

目前我正在尝试使用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开发工具中)如果我直接在浏览器中输入我的URL,但是当执行js代码时我看到以下错误:

  

Uncaught(在promise中)SyntaxError:意外的标记<

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

UPD: 当我将response.json()更改为response.text()时,我终于得到了数据))有什么理由吗?另外在我的网址中我有查询字符串参数(比如?par1 = 1& par2 = 2)我想传递给我的REST控制器,当我再次使用以下方法直接在浏览器中输入我的网址时,我得到了这些参数: / p>

$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:     view:{annotations:false}     router:{annotations:true}

1 个答案:

答案 0 :(得分:0)

尝试在配置中添加:

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

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

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