【问题标题】:Posting Image to Facebook using Ajax: Authorization Dialog not working使用 Ajax 将图像发布到 Facebook:授权对话框不起作用
【发布时间】:2013-11-01 14:16:13
【问题描述】:

我正在尝试使用 ajax 使用 PHP SDK 将图像发布到 facebook,(这是我第一次尝试使用 ajax 上传)但是当用户单击按钮时,FB App。如果用户已经授权应用程序并登录,则不会出现授权对话框,然后图片发布成功:这是我的代码:

view.php?id=xxxx

    document.getElementById("uploadfb").onclick=function(e){
        e.preventDefault();
    //id hidden input type in a form
        id = $("#id").val();    
        $.ajax({
            type: "GET",
            url: "uploadfb.php",
            data: {id: id},
            dataType : 'json',
            forceIframeTransport: true, //force use iframe or will no work
            autoUpload : true,              
            success: function(result){
                alert("Success");
            },
            error: function(errorThrown){
                alert("Error");
            }
        });
    return false;
    };

uploadfb.php 包含所有必要的 fb 登录代码和图片发布

$id=$_GET['id'];
require_once 'config.php';
    $user = $facebook->getUser();
        if($user)
        {
        // We have a user ID, so probably a logged in user.
        try {
            $user_profile = $facebook->api('/me');
            }
            catch (FacebookApiException $e) {
            error_log($e);
            $user = null;
            }
        } else {
            $params = array(
            'scope' => 'publish_stream,user_photos'
            );
            $loginUrl = $facebook->getLoginUrl($params);
            header('location:' .$loginUrl);
        }
///// then image post code
if($user)
    {
    $args['image'] = '@' . realpath($id);
    $post = $facebook->api('/me/photos', 'post', $args);
    }

当用户已经授权应用时。单击上传按钮图像上传到 facebook 并返回成功。 当新用户点击然后facebook应用程序授权对话框没有出现它返回错误时出现问题

还尝试将 getLoginUrl 参数中的重定向 uri 更改为 uploadfb.php?id=xxxxx 但仍然没有出现应用授权。

出于测试目的,我放置了一个单独的按钮“使用 facebook 登录”,只有登录代码

login.php

require_once 'config.php';
$user = $facebook->getUser();
    if($user)
    {
    // We have a user ID, so probably a logged in user.
    try {
        $user_profile = $facebook->api('/me');
        }
        catch (FacebookApiException $e) {
            error_log($e);
        $user = null;
        }
    } else {
        $params = array(
        'scope' => 'publish_stream,user_photos'
        );
        $loginUrl = $facebook->getLoginUrl($params);
        header('location:' .$loginUrl);
    }

我得出的结论是 Auth.对话框未出现在 ajax 请求中。 现在,当用户第一次使用登录按钮登录时,然后单击上传按钮结果是成功的 图片发布成功。 但是如果直接新建用户(没有第一次授权),点击上传按钮它会给出错误。

我不想放置两个单独的按钮,所以用户第一次单击登录,然后单击上传按钮。 当用户点击上传按钮时想要,如果用户尚未授权。我的应用程序授权对话窗口打开,这里不工作。

Ajax 代码中缺少什么?或者它不可能显示身份验证。 ajax 请求中的对话框。对此的任何替代解决方案也将有所帮助。感谢您抽出时间。

【问题讨论】:

    标签: php ajax facebook facebook-php-sdk


    【解决方案1】:

    您可以尝试使用 JavaScript 登录方法来查看您的 Ajax 调用是否有效,而不是使用 PHP 登录方法:

    document.getElementById("uploadfb").onclick=function(e){
        e.preventDefault();
        // id hidden input type in a form
        id = $("#id").val();
        FB.login(function(response) {
          if (response.authResponse) {
            $.ajax({
              type: "GET",
              url: "uploadfb.php",
              data: {id: id},
              dataType : 'json',
              forceIframeTransport: true, //force use iframe or will no work
              autoUpload : true,              
              success: function(result){
                alert("Success");
              },
              error: function(errorThrown){
                alert("Error");
              }
            });
          });
          } else {
            console.log('User cancelled login or did not fully authorize.');
          }
        });
        return false;
      };
    

    我基本上用 FB.login() 方法封装了 Ajax 调用,因此要求用户先登录,然后再调用 Ajax 来上传文件。它现在应该适用于已登录和未登录的用户。

    【讨论】:

      猜你喜欢
      • 2016-11-20
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多