目前我正在尝试使用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}
答案 0 :(得分:0)
尝试在配置中添加:
fos_rest:
# ...
view:
# ...
formats:
json: true
如果它不起作用,请添加以下内容:
fos_rest:
# ...
format_listener:
rules:
- { path: '^/yourApiPrefix', priorities: ['json'], fallback_format: json, prefer_extension: false }