我正在创建一个照片展位应用,用户可以将照片分享到他们的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)在上传之前检查重复的照片(似乎这对于非常慢的上传过程不起作用)
所以我留下了唯一的解决方案,希望超时过程永远不会结束。这让我觉得不可靠,可能会导致一些重复。与此同时,当我试图等待上传时,它总是花费比我耐心更长的时间。
解决这个问题的想法是什么?
答案 0 :(得分:0)
这应该是可能的。首先在try中包装到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
}