目前我正在尝试使用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 }