Facebook Open Graph - 发出HTTP DELETE请求

时间:2012-11-08 19:01:31

标签: facebook facebook-graph-api jquery facebook-javascript-sdk facebook-opengraph

我正在尝试通过Ajax HTTP DELETE请求删除权限,但我回复的响应并不是图表api文档说我应该得到的。它说我应该得到一个布尔响应(“如果删除成功则返回true,否则返回错误。”)。但相反,我得到了权限列表的整个对象:

var revokePermission = function(permName) {

    var revoke_perm_url = "https://graph.facebook.com/me/permissions" +
                          "?access_token=" + access_token + "&callback=?";

    $.ajax({
        type: "DELETE",
        dataType: "jsonp",
        url: revoke_perm_url,
        data: {'permission': permName},
        success: function(response){
            console.log(response);
        }
    });
}

revokePermission(permission_name);

以下是我的回复:

data: Array[1]
    0: Object
        bookmarked: 1
        create_note: 1
        email: 1
        installed: 1
        photo_upload: 1
        publish_actions: 1
        publish_stream: 1
        read_stream: 1
        share_item: 1
        status_update: 1
        user_interests: 1
        user_likes: 1
        user_status: 1
        video_upload: 1

请注意,api文档说:

  

您可以完全取消授权应用程序,也可以只撤销   代表用户发出HTTP DELETE的特定权限   PROFILE_ID / permissions或PROFILE_ID / permissions / PERMISSION_NAME   分别。必须使用值user user_token进行此请求   对于当前的应用程序。

我理解这一切,所以当我向特定权限URL发出请求(即“/ permissions / user_likes /”)或者通过ajax数据参数发送权限的基本权限url时,他们都返回我当前所有权限的对象,我请求删除的权限保持不变。

但是,当我在url和发送的数据中设置权限时,它会返回一个错误的对象:

Object
    error: Object
    code: 2500
    message: "Cannot specify permission in both the path and query parameter."
    type: "OAuthException"

任何人都知道发生了什么事吗?请注意,auth.revokeExtendedPermission的LEGACY REST方法确实可以正常工作(http://developers.facebook.com/docs/reference/rest/auth.revokeExtendedPermission/)。它返回一个布尔响应,并删除相应的权限。

解决方案?

2 个答案:

答案 0 :(得分:3)

完整代码经过测试,返回'true':

var revokePermission = function(permName) {
    var revoke_perm_url = "https://graph.facebook.com/me/permissions";
    $.ajax({
        type: "POST",
        dataType: "jsonp",
        url: revoke_perm_url,
        data: {
           'access_token' : 'access_token_here',
           'permission': permName,
           'method' : 'delete'
        },
        success: function(response){
            alert(JSON.stringify(response, null, 4));
        }
    });
}
revokePermission("email");

答案 1 :(得分:0)

“type:DELETE”实际上是否可以发送HTTP DELETE请求? 您回到那里的回复是对/<USER>/permissions

的GET请求的响应

您可以通过添加另一个参数'method'来伪造删除请求,并在发出GET请求时将其设置为delete,即

data: {
'permission': permName
'method' : 'delete'
},