1

我正在创建一个照相亭应用程序,用户可以在其中将他们拍摄的照片分享到他们的 Facebook 帐户。大多数情况下,它运行良好。我正在使用 AJAX 发布到这个 PHP 页面:

$appID = "#####";
$appSecret = "#####";
$accessToken = $_POST['accessToken'];
$filePath = $_POST['imagePath'];
$message = $_POST['message'];

// Initialize the SDK
$facebook = new Facebook(array(
    'appId' => $appID,
    'secret' => $appSecret,
    'fileUpload' => true,
    'cookie' => true
));

$facebook->setAccessToken($accessToken);

// Upload the photo
$response = $facebook->api("/me/photos", "post", array(
    'message' => $message,
    'image' => '@' . $filePath
));

echo json_encode($response);

如果我在响应中从 Facebook 取回一个帖子 ID,我的 Javascript 会显示一条成功消息。如果我收到没有帖子 ID 的回复,则会显示错误消息。有时,无论是 Facebook 速度慢还是互联网中断或其他我无法控制的因素,对 Facebook 的请求都会继续处理,而我根本没有得到任何回复。

如果需要很长时间,我想在上传过程中创建某种“仍在工作...”消息,然后是“我们很抱歉,但您的照片无法上传。请刷新页面并再试一次”,如果时间太长。我知道我可以轻松地在 jQuery.ajax 请求上创建超时,但问题是(据我的理解)即使超时并且执行了错误回调,请求仍在服务器上进行。如果由于某种原因上传原始照片的时间超过了我的超时时间,那么当用户刷新页面并成功上传时,他们将有一个副本。

我对此提出了一些假设的解决方案,但不确定如何实施其中的任何一个。

1)在一定时间后取消上传过程服务器端(我相当确定这是不可能的)并显示错误 2)在上传之前检查重复的照片(似乎这不适用于一个非常缓慢的上传过程)

所以我只剩下希望超时过程永远不会结束的唯一解决方案。这让我觉得不可靠,可能会导致一些重复。同时,当我试图等待上传时,它总是比我耐心等待的时间长。

解决这个问题的任何想法?

4

1 回答 1

0

这应该是可能的。首先在尝试中包装到 api 调用并捕获异常。您还可以将请求超时更改为更长或更短。那将是“取消”的一种方式。您可以在 base_facebook.php 中更改它并查找 CURLOPT_CONNECTTIMEOUT。

try {
    $response = $facebook->api("/me/photos", "post", array(
        'message' => $message,
        'image' => '@' . $filePath
    ));
} catch (FacebookApiException $e) {
    var_dump($e);
    // Other error handling
}
于 2012-12-05T00:08:33.913 回答