我有一个网络应用程序,允许用户使用他们执行的健身练习列表将自定义故事发布到他们的Facebook时间线。
第一个版本循环练习并为每个练习调用FP.api,它运行正常。
现在我想通过批量请求拨打FB.api,以加快发布,以及我遇到麻烦的地方。
这是循环工作正常的代码(exids是一个数组数组):
function postToFB(exids)
{
fbi = 0;
fblength = exids.length;
for (var i = 0; i < fblength; i++)
{
FB.api(
'me/' + vitNamespace + ':perform',
'post',
{
exercise: "http://www.vitalclub.net/scripts/getExforFB.php?exid=" + exids[i],
'fb:explicitly_shared': true
},
function(response) {
...
});
}
}
以下是包含批量请求的代码,它返回错误:
function postToFB(exids)
{
var batcharr = [];
for (var i = 0; i < exids.length; i++)
batcharr.push({ method: 'post', relative_url: 'me/' + vitNamespace + ':perform', body: "exercice=http://www.vitalclub.net/scripts/getExforFB.php%3Fexid%3D" + exids[i] + "&fb:explicitly_shared=true" });
FB.api(
'/',
'post',
{ batch: batcharr, include_headers: false },
function(response) {
...
});
}
我得到的错误(针对每个练习)如下:您尝试发布的操作无效,因为它未指定任何参考对象。必须至少指定以下属性之一:exercise。
我认为这与批处理请求中的主体格式化方式有关,但我找不到正确的格式化方法。我已尝试在表示练习的URL上使用encodeURIComponent,但错误是相同的。
任何人都知道问题是什么?
谢谢,
让
答案 0 :(得分:0)
我现在也使用$ .param来格式化参数,所以我现在有:
var batcharr = [];
var opts;
for (var i = 0; i < exids.length; i++)
{
opts = { exercise: "http://www.vitalclub.net/scripts/getExforFB.php?exid=" + exids[i], 'fb:explicitly_shared': true };
batcharr.push({ method: 'post', relative_url: 'me/' + vitNamespace + ':perform', body: $.param(opts) });
}
在致电FB.api之前,它就像一个魅力!