使用Ajax将图像发布到Facebook:授权对话框无法正常工作

时间:2013-10-23 10:39:38

标签: php ajax facebook facebook-php-sdk

我正在尝试使用ajax将PHP图像发布到Facebook,(我的第一次尝试使用ajax上传)但是当用户点击按钮时,FB App。如果用户已授权应用程序&登录然后图片发布成功:这是我的代码:

view.php?编号= 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 Code中缺少什么?或者无法显示身份验证。 ajax请求中的对话框。对此的任何替代解决方案也将有所帮助。谢谢你抽出时间。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用JavaScript Login方法查看您的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调用以上传文件。它现在应该适用于已登录和未登录的用户。