首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ajax请求的中间重定向

在ajax请求的中间重定向
EN

Stack Overflow用户
提问于 2012-08-18 11:41:57
回答 4查看 1.4K关注 0票数 0

我有一个网站,用户可以发布链接。用户在表单中填写两个字段:

  • 标题
  • URL

当用户点击“提交”,我有一个爬虫,寻找提供的链接图像,并制作一个缩略图。

问题是,爬虫通常需要5-10秒的时间来完成加载和剪切拇指。

我想我可以像这样做一个ajax调用。正如您所看到的,当用户首先提交一个链接时,我们将看到它是否有效(第一个ajax调用),如果成功,我们将执行另一个ajax调用来尝试查找和保存该链接的图像。

我的想法是在将用户移动到links.php页面时这样做,但是,我发现如果这样做,AJAX调用中断,而save_image.php中的函数不会运行。

如何避免让我的用户等待save_image.php进程?我需要运行这个进程,但是我不需要返回任何数据。

代码语言:javascript
复制
$.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';

                    }   
});

提前感谢!

总结:,我希望用户提交一个链接并将用户重定向到链接页,而该链接的缩略图正在生成。我不想向用户展示缩略图。

EN

回答 4

Stack Overflow用户

发布于 2012-08-18 12:00:37

AJAX请求似乎失败了,因为当您离开时,用户请求将被中止。正因为如此,save_image.php的执行就中断了。

您可以使用PHP的ignore_user_abort强制process在后台继续。把它放在save_image.php的顶部

代码语言:javascript
复制
<?php
    ignore_user_abort(true);

    // ... save image, etc.
?>

要使其工作,您必须向客户端发送(和同花顺)一些输出:

在尝试向客户端发送信息之前,PHP不会检测到用户已中止连接。只使用echo语句并不能保证信息被发送,请参阅冲洗()

任何产出都应该有效(例如:“好”)。考虑到您正在使用的是一个框架,这可能是一个挑战,但这不应该是不可能的。这可能有用:用CodeIgniter冲洗

您可以阅读更多有关PHP处理这里的内容。

票数 3
EN

Stack Overflow用户

发布于 2012-08-18 11:55:07

强制用户先填写url,然后填写标题,当用户转到title字段开始爬行数据时,直到完成标题并按sumbit之后,您将获得一些时间,使进程看起来更快。

票数 1
EN

Stack Overflow用户

发布于 2012-08-18 11:43:55

如果不需要返回数据,为什么要使用XHR呢?只需让您的表单提交链接到links.php,并让它保存那里的图像!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12018257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档