将signed_request和AJAX调用一起传递给使用Canvas Authorize修饰的Action方法

时间:2011-05-20 11:27:40

标签: ajax facebook jquery facebook-c#-sdk

这是AJAX Call Does Not Trigger Action Method When Decorated With CanvasAuthorize

的后续行动

所以我找到了以下链接,似乎这是一个常见的问题:

http://facebooksdk.codeplex.com/discussions/251878

http://facebooksdk.codeplex.com/discussions/250820

我试图遵循prabir的建议,但我无法让它工作......

这是我的设置:

我在页面中有以下代码片段,其中触发整个帖子到Facebook的按钮位于:

@if (!string.IsNullOrEmpty(Request.Params["signed_request"]))
{
    <input type="hidden" id="signedReq" value="@Request.Params["signed_request"]" />
}

然后我有这个片段(在同一页面内的脚本标签内):

    var signedRequest = $('#signedReq').val();
    $('.facebookIcon').click(function () {
        var thisItem = $(this).parent().parent();
        var msg = thisItem.find('.compItemDescription').text();
        var title = thisItem.find('.compareItemTitle').text();
        var itemLink = thisItem.find('.compareItemTitle').attr('href');
        var img = thisItem.find('img').first().attr('src');
        postOnFacebook(msg, itemLink, img, title, signedRequest);
    });

最后,在外部js文件中,我有以下功能:

/*Facebook post item to wall*/
function postOnFacebook(msg, itemLink, pic, itemTitle, signedReq) {
    console.log(signedReq);
    var siteUrl = 'http://www.localhost:2732';
    $.ajax({
        url: '/Facebook/PostItem',
        data: {
            'message': msg,
            'link': siteUrl + itemLink,
            'picture': siteUrl + pic,
            'name' : itemTitle,
            'signed_request': signedReq
        },
        type: 'get',
        success: function(data) {
            if(data.result == "success") {
                alert("item was posted on facebook");
            }
        }
    });
}

但signedReq总是未定义的。而且我不确定我应该在数据对象中传递'signed_request'字段。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

确保正在填充隐藏的输入字段。

此外,当您尝试通过JQuery提取输入字段的ID时,您可能没有引用正确的元素,因为.NET Butcher的ID是服务器上运行的任何内容。

当我使用隐藏的输入字段技巧时,我像这样设置jquery值:

var signedRequest = $('#&lt;%= signedReq.​​ClientID%&gt;')。val();

这样,我就获得了.NET给HTML元素的标识符。

希望有所帮助。

答案 1 :(得分:0)

只是一个猜测 - 在您隐藏的字段中:id =“signed_request”而不是id =“signedReq”