我有一系列标签,我想在Instagram上测试它们以获得media_count。然后我想将我得到的数据发送到我的symfony控制器。此代码正常工作,我在Success函数中触发了警报。
for (var i = 0; i < 1; i++) {
var tagname = tags[i];
var url = "https://api.instagram.com/v1/tags/" + tagname + "?client_id=" + clientID;
$.ajax({
type: "GET",
dataType: "jsonp",
cache: false,
url: url,
success: function (res) {
var data = "{'name':'" + res.data.name + "','count':'" + res.data.media_count + "'}";
$.ajax({
type: "POST",
url: controller-url,
data: data,
success: function(response) {
alert(data);
}
});
}
});
}
然后我使用this答案中的解决方案解码我在控制器中的数据,如下所示:
public function createAction(Request $request) {
$params = array();
$content = $this->get("request")->getContent();
$params = json_decode($content, true); // 2nd param to get as array
...
}
但是当我尝试将$ params发送到模板时,它是空的。为什么这样,我做错了什么?
答案 0 :(得分:2)
迟了2年,但今天我遇到了同样的问题,并发现了这个悬而未决的问题:
在您的回调函数中,假设您的数据已正确字符串化(看起来如此),您忘记指定contentType:"application/json"
success: function (res) {
var data = "{'name':'" + res.data.name + "','count':'" + res.data.media_count + "'}";
$.ajax({
type: "POST",
contentType : 'application/json',
url: controller-url,
data: data,
success: function(response) {
alert(data);
}
否则,在您的Symfony控制器中,如果您返回:
$req->headers->get("Content-Type")
...您将看到它已使用默认x-www-form-urlencoded
希望将来帮助某人。
答案 1 :(得分:1)
我看了这个:
public function createAction(Request $request) {
$params = array();
$content = $this->get("request")->getContent();
$params = json_decode($content, true); // 2nd param to get as array
...
}
问题是你没有从createAction函数中获取$ request。
public function createAction(Request $request) {
$params = array();
$content = $request->getContent();
if (!empty($content)) {
$params = json_decode($content, true);
}
...
}
现在您将从$ request获取JSON内容。
干杯!