使用jQuery AJAX和PHP创建智能远程上传脚本

流产

我目前正在创建图像托管脚本,到目前为止一切顺利。我已经使用了几个插件通过drag&drog + AJAX创建了本地上传过程,这完全正常。现在,我已经转到需要使用jQuery AJAX和PHP脚本来处理整个过程的远程上传过程的部分。

它如何运作

我的想法是这样的:页面中间有一个大盒子,可以接受要远程上传的URL。有效的URL传递到文本区域后,它们将立即通过jQuery AJAX发送到服务器端脚本。它绑定了一个keyup事件。

外观如下: http : //i.imgur.com/NhkLKii.png
“来到这里的URL”部分已经是一个文本区域-所以这部分本已完成。


我需要帮助的地方

整个情况的问题是:一旦在文本区域中粘贴了有效的URL,则必须立即将其转换为某种形式的框,其中还应包括上载进度。看起来像这样的东西(从本地上传部分复制):http : //i.imgur.com/q7RyDmb.png

因为它是我使用的插件提供的功能,所以很容易实现本地上载的进度指示器,但是我不知道如何指示远程上载的进度,这完全是从头开始的。

这就是我想象的逻辑流程:

  1. 用户将一些URL粘贴到文本区域
  2. 有一个客户端检查来验证粘贴的URL
  3. 验证URL被发送到upload.php的 (?) keyup
  4. 网址正在处理中
  5. 继续上传时,我们向用户显示旋钮 (?)的进度
  6. PHP脚本完成了该过程,并返回了上载的URL
  7. 我更新了AJAXsuccess回调中的页面以显示上传的文件

因此,标记为(?)的两个流程对我来说并不明确-我不知道该如何实现...


我尝试过的

好吧,我不只是来这里请您为我做所有事情,但是我遇到了死胡同,我不知道如何继续。到目前为止,我所做的是从文本区域中收集URL,如果有多个URL以换行符(\n分隔,我只是简单地使用它split来获取粘贴的文本数组,然后在循环内使用另一个函数进行验证如果它们是URL。如果在文本区域值内未检测到换行符,那么我只需检查提供的一行。在每种情况下,我都将整个文本区域发送到PHP脚本,因为我不知道如何摆脱jQuery中的无效URL我创建了一个debug()在PHP中调用的函数该函数将任何内容存储到debug.log中 文件,这是我将某些内容粘贴到文本区域时得到的(一次尝试):

https://www.google.com/https://www.google.com/

https://www.google.com/在文本区域粘贴了一次,但是在PHP方面记录了两次,我无法确定原因。

这是我的jQuery的样子:

// Remote upload
    var char_start  = 10;
    var index       = 0;
    var urls        = $('.remote-area');
    var val_ary     = [];

    urls.keyup(function(){      
        if (urls.val().length >= char_start)
        {           
            var has_lbrs = /\r|\n/i.test(urls.val());
            val_ary = urls.val().split('\n');

            if (has_lbrs)
            {
                for (var i = 0; i < val_ary.length; i++)
                {
                    if (!validate_url(val_ary[i]))
                    {
                        val_ary.splice(i, 1);
                        continue;   
                    }       
                }

                $.ajax({
                    type: 'POST',
                    url: 'upload.php',
                    data: {
                        upload_type: 'remote', // Used to determine the upload type in PHP
                        urls: val_ary, // Sending the whole array here
                    },
                });
            }
            else
            {
                if (!validate_url(urls.val()))
                {
                    // Display an error here
                    return; 
                }

                $.ajax({
                    type: 'POST',
                    url: 'upload.php',
                    data: {
                        upload_type: 'remote', // Used to determine the upload type in PHP
                        urls: urls.val(), // Sending what's in the text area
                    },
                });
            }
        }
    });

问题

因此,最后的问题是:

  • 如何将我的信息正确地发送到PHP脚本(仅有效的URL),并使它们在我的PHP脚本中“可处理”
  • 如何指示上传进度?

如果我在提问过程中不清楚的地方,请告诉我,我将尝试进行解释。

谢谢。


更新

2013/09/12

我想我已经解决了双重发送问题,即我的AJAX将相同的信息两次发送到PHP脚本。我所做的是延迟匿名函数中的代码,该函数用户停止键入2秒钟后将文本区域内容发送到PHP脚本一旦用户再次停止键入,计时器将重置并发出新的AJAX请求。因此,我假设此问题已解决。如果发生任何奇怪的情况,我会再讲。

现在,我仍然剩下进度指示器部分。感谢您对此的想法。

我的新代码: http : //pastebin.com/SaFSLeE9

Naltharial

在来回交流进度方面,您正在寻找的是“推动”。那是指服务器将数据发送到客户端的技术,而不是相反的方式,这是标准的HTTP处理方式。

如解释性的Wikipedia文章所述,您有很多可用的选项,尽管与此主题更相关的可能是Comet发生的事情是您$.ajax像现在一样触发并拨打电话,但是设置了很长的超时时间。从本质上讲,这为服务器提供了一个“通道”,以便在数据可用时将其发送回页面。

因此,您需要的是.php服务器上的服务器,该服务器能够处理长时间的轮询,并且随着上载进度的更改(可能以数组形式用于多次上载)将数据发送回页面。本文应该使您开始使用一些jQuery代码。请记住,此请求不会发送给upload.php该请求转到另一个脚本,该脚本仅处理上载百分比,并且仅在可用时返回数据,它不会像其他所有脚本一样立即返回-Ajax会很高兴地等待数据。

另外,请勿使用来分隔代码has_lbrs一条或多条线不是截然不同的情况,一条线只是多条线的边缘情况。您不必要地复制了代码。else在一般情况下会破坏什么情况?此外,这种else情况下的“错误处理”具有误导性。您所做的唯一错误报告是,如果只有一行并且是错误的。如果您有两条线并且都错了怎么办?您的代码会愉快地将一个空数组发送到upload.php

这就是为什么我认为您不应该这样分离代码的原因,因为那样您会分离逻辑,甚至不会注意到它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用jQuery AJAX和PHP创建智能远程上传脚本

来自分类Dev

使用JQuery和PHP进行Ajax上传

来自分类Dev

使用 Ajax 和 JQuery 调用 PHP 脚本

来自分类Dev

使用AJAX,PHP和jQuery上传多个图像

来自分类Dev

如何使用PHP,jQuery和AJAX上传多个文件

来自分类Dev

如何使用PHP,jQuery和AJAX上传多个文件

来自分类Dev

使用jQuery AJAX和FormData上传文件

来自分类Dev

使用ajax,jquery,php上传文件

来自分类Dev

使用PHP和JQuery上传多个文件

来自分类Dev

使用 PHP 和 jQuery 上传多个图像

来自分类Dev

使用Ajax和PHP上传图片

来自分类Dev

使用Ajax和php上传文件

来自分类Dev

将智能向导 4 与 ajax 和 php 结合使用

来自分类Dev

使用Ajax和Google App脚本上传文件以驱动

来自分类Dev

如何使用XAMPP将Ajax文件上传到php脚本

来自分类Dev

PHP使用jquery创建多个图片上传和多个文本框

来自分类Dev

使用jQuery Ajax上传文件

来自分类Dev

使用 Ajax、Jquery 上传文件

来自分类Dev

使用jquery .on()和$ .ajax

来自分类Dev

使用 AJAX 和 POST 运行 php 脚本

来自分类Dev

使用FormData和jQuery.ajax上传文件

来自分类Dev

使用Ajax,MVC 5和jQuery上传单个文件

来自分类Dev

使用 jquery ajax 和 codeigniter 上传 csv 文件

来自分类Dev

使用jquery和php登录Ajax

来自分类Dev

使用jquery和php登录Ajax

来自分类Dev

使用 jquery、ajax 和 php 登录

来自分类Dev

使用curl和php脚本上传图像和文本

来自分类Dev

使用AngularJS和php服务器脚本上传文件

来自分类Dev

使用AJAX Jquery在PHP中上传图片无法正常工作