我有一个网站,用户可以发布链接。用户在表单中填写两个字段:
当用户点击“提交”,我有一个爬虫,寻找提供的链接图像,并制作一个缩略图。
问题是,爬虫通常需要5-10秒的时间来完成加载和剪切拇指。
我想我可以像这样做一个ajax调用。正如您所看到的,当用户首先提交一个链接时,我们将看到它是否有效(第一个ajax调用),如果成功,我们将执行另一个ajax调用来尝试查找和保存该链接的图像。
我的想法是在将用户移动到links.php页面时这样做,但是,我发现如果这样做,AJAX调用中断,而save_image.php中的函数不会运行。
如何避免让我的用户等待save_image.php进程?我需要运行这个进程,但是我不需要返回任何数据。
$.ajax({
url: 'publish/submit_link.php',
type: 'POST',
dataType: 'JSON',
data: {
link : link,
title : title,
},
success: function (data) {
if (data)
{
$.ajax({
url: 'publish/save_image.php', type: 'POST',
data: {
id : data.id,
type : data.type,
url : url,
csrf_test_name : csrf
}
});
}
//THIS NEXT LINE BREAKS SECOND AJAX CALL
window.location = 'links.php';
}
});提前感谢!
总结:,我希望用户提交一个链接并将用户重定向到链接页,而该链接的缩略图正在生成。我不想向用户展示缩略图。
发布于 2012-08-18 12:00:37
AJAX请求似乎失败了,因为当您离开时,用户请求将被中止。正因为如此,save_image.php的执行就中断了。
您可以使用PHP的ignore_user_abort强制process在后台继续。把它放在save_image.php的顶部
<?php
ignore_user_abort(true);
// ... save image, etc.
?>要使其工作,您必须向客户端发送(和同花顺)一些输出:
在尝试向客户端发送信息之前,PHP不会检测到用户已中止连接。只使用echo语句并不能保证信息被发送,请参阅冲洗()。
任何产出都应该有效(例如:“好”)。考虑到您正在使用的是一个框架,这可能是一个挑战,但这不应该是不可能的。这可能有用:用CodeIgniter冲洗
您可以阅读更多有关PHP处理这里的内容。
发布于 2012-08-18 11:55:07
强制用户先填写url,然后填写标题,当用户转到title字段开始爬行数据时,直到完成标题并按sumbit之后,您将获得一些时间,使进程看起来更快。
发布于 2012-08-18 11:43:55
如果不需要返回数据,为什么要使用XHR呢?只需让您的表单提交链接到links.php,并让它保存那里的图像!
https://stackoverflow.com/questions/12018257
复制相似问题