我的代码中有一个fql查询,直到上周(或那里)工作完美,然后突然停止工作。
我现在收到一个奇怪的#803错误以及消息“你请求的一些别名不存在:”这是特殊的(我相信是一个完全红色的鲱鱼),因为我现在尝试删除所有我以前的别名,只用“名字”替换它们。
完全在我的绳索上试图找出Facebook在过去几周内改变了什么导致了这一点。如果有人有任何见解,我会非常感激听到它。
我在这里发布我的代码,但我不期待对代码本身的任何评论,看它是如何在几个月内完美地工作直到过去两周左右的某个时间点。
代码的具体用途是为用户获取身份验证令牌,然后检索/ me请求中不可用的更详细信息。
//I call this first to get the token
function checkStatus() {
try{
FB.getLoginStatus( function( loginResponse ){
if( loginResponse.status == "connected" ){
authToken = loginResponse.authResponse.accessToken;//this comes back as expected
expiresIn = loginResponse.authResponse.expiresIn;//this comes back as expected
getUserInfo();
} else {
registerApp();//this gets called if the user hasn't approved the app yet... this continues to work as expected
}
} );
}
catch(e){
alert("ERROR" + e);
}
}
//so the above method calls this
function getUserInfo(){
FB.api( "/me", function( meResponse ){
meResponse.authToken = authToken;
meResponse.expiresIn = expiresIn;
console.log("meResponse = " + JSON.stringify(meResponse));
//this contains all the correct expected data
FB.api(escape("/fql&q=SELECT name FROM user WHERE uid = '"+ meResponse.id +"'"),//here I've eliminated ALL extra aliases (though none of them were a problem before
function( response ){
console.log("RESP = " + JSON.stringify(response)); //this comes back with the following error:
//{"error":{"message":"(#803) Some of the aliases you requested do not exist: fql&q=SELECT name FROM user WHERE uid = 'xxxxxxxxx'","type":"OAuthException","code":803}}
}
)
} );
}
答案 0 :(得分:0)
所以...看起来FB似乎完全改变了fql如何被调用的语法,我没有看到任何对我上面的旧方式的引用(完全有效)。
新方法是传入一个如下所示的JSON对象:
{method:'fql.query', query: "SELECT uid,name,email,first_name,last_name,birthday_date,pic_big FROM user WHERE uid = '"+ meResponse.id +"'"}
并且响应NO LONGER作为一个名为 data 的数组返回,现在是返回对象顶层的原始未命名数组...所以在我上面的例子中,我现在只看响应[0]而不是response.data [0]。
我在他们的任何文档中都没有提到任何这些变化......也许我只是在失去理智,但看起来他们只是完全修改了他们的API而没有任何警告。
也许我错过了一些东西(我通常都是)。
以防万一其他人需要帮助...这是新工作代码的一个例子......
FB.api(
{method:'fql.query',
query: "SELECT uid,name,email,first_name,last_name,birthday_date,pic_big FROM user WHERE uid = '"+ meResponse.id +"'"},
function( response ){
console.log("RESP = " + JSON.stringify(response));
//all the data for this specific user is now in response[0], obviously if your search criteria contains more users, they'll be in the subsequent indexed items under the response array.
}
)