Javascript 上传文件后,我怎么还能使用AJAX?

Javascript 上传文件后,我怎么还能使用AJAX?,javascript,php,ajax,file-upload,Javascript,Php,Ajax,File Upload,在我的应用程序中,我有一个导入数据功能。当前,当有人上载CSV文件并提交页面时,他们会看到指示文件正在上载的微调器。大约一分钟后,一旦导入完成,页面将刷新 我想通过添加导入的进度条,使页面变得更友好一些。我的导入类在CSV中的每一行上循环以导入数据,因此我添加了一些代码,以便在每几次循环之后,它将百分比写入一个文件,以便我可以使用AJAX请求读取该文件并显示百分比 我想读取文件,但提交表单后发送的任何AJAX请求都不会返回给我。似乎服务器知道页面将被刷新,所以它甚至不需要麻烦。在Chrome的开

在我的应用程序中,我有一个导入数据功能。当前,当有人上载CSV文件并提交页面时,他们会看到指示文件正在上载的微调器。大约一分钟后,一旦导入完成,页面将刷新

我想通过添加导入的进度条,使页面变得更友好一些。我的导入类在CSV中的每一行上循环以导入数据,因此我添加了一些代码,以便在每几次循环之后,它将百分比写入一个文件,以便我可以使用AJAX请求读取该文件并显示百分比

我想读取文件,但提交表单后发送的任何AJAX请求都不会返回给我。似乎服务器知道页面将被刷新,所以它甚至不需要麻烦。在Chrome的开发者工具中查看网络选项卡中的请求会显示(待定)的状态,并且它们都不会改变


在我提交表单后,是否有某种方式可以继续发出AJAX请求?作为补充说明,应用程序需要支持IE9+,因此使用文件API通过AJAX提交文件不是一个选项。

如果使用会话,则会发生这种情况:第一个请求会阻止临时会话文件进行读取。后续请求必须等待释放锁,然后服务器才能开始执行它们

这也意味着您不能将会话用于进度显示


还要记住,等待时间的一个重要部分是由于文件的上载。根据您的治疗情况,上传时间可能比治疗时间重要得多。因此,您的进度条不会给出您期望的结果

假设您的页面名为
importdata.php
,并且您在该页面上的脚本中执行类似操作以开始监视进度:

importForm.onsubmit = monitorProgress;
您可以做的是在iframe中托管整个页面。创建一个新页面来承载iframe。如果要保持URL不变,请将原始页面重命名为
importdata\u form.php
,并调用新页面
importdata.php
。在新页面中,包括一个脚本块和一个填充页面的iframe。将
从原始页面移动到新页面。将iframe的src设置为
importdata\u form.php
。将
monitorProgress
功能移动到新页面中的脚本块。然后更改原始页面中的
onsubmit
处理程序,以引用父窗口中的函数(请参阅):

您的新页面可能如下所示:

<!doctype html>
<html>
    <head>
        <title><!-- move title from original page to here --></title>
        <style>
            iframe {
                position: absolute;
                top: 0;
                right: 0;
                bottom: 0;
                left: 0;
                border: 0 none;
            }
        </style>
        <script>
            function monitorProgress() {
                // your ajax calls here
            }
        </script>
    </head>
    <body>
        <iframe src="importdata_form.php"></iframe>
    </body>
</html>

iframe{
位置:绝对位置;
排名:0;
右:0;
底部:0;
左:0;
边界:0无;
}
函数监视器进程(){
//您的ajax调用在这里
}

情况并非如此,但我已让我的web主机在调用多个AJAX请求后短时间内阻止了我的请求。请在iframe中上载文件。@gilly3,iframe会剥离任何表单元素,并且不允许创建表单元素。
<!doctype html>
<html>
    <head>
        <title><!-- move title from original page to here --></title>
        <style>
            iframe {
                position: absolute;
                top: 0;
                right: 0;
                bottom: 0;
                left: 0;
                border: 0 none;
            }
        </style>
        <script>
            function monitorProgress() {
                // your ajax calls here
            }
        </script>
    </head>
    <body>
        <iframe src="importdata_form.php"></iframe>
    </body>
</html>