【问题标题】:Ajax output brings duplicate PHP upload form on web pageAjax 输出在网页上带来重复的 PHP 上传表单
【发布时间】:2017-06-01 09:50:47
【问题描述】:

我正在尝试将http://malsup.com/jquery/form/progress.html 上的进度条集成到 php 上传表单中。它工作得很好,除了它在提交第一个表单后在同一页面上返回重复的上传表单。请参阅下面的表单截图。

Form Screen Shot

ajax 调用如下:

<script type="text/javascript">
(function() {

var bar = $('.bar');
var percent = $('.percent');
var status = $('#status');


$('#Myform').ajaxForm({
    beforeSend: function() {
        status.empty();
        var percentVal = '0%';
        bar.width(percentVal)
        percent.html(percentVal);
    },
    uploadProgress: function(event, position, total, percentComplete) {
        var percentVal = percentComplete + '%';
        bar.width(percentVal)
        percent.html(percentVal);
    },
    success: function() {
        var percentVal = '100%';
        bar.width(percentVal)
        percent.html(percentVal);
    },
    complete: function(xhr) {

        status.html(xhr.responseText);

    }
}); 

})(); 

html部分可以表示为:

<form id="#Myform" action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="post" enctype="multipart/form-data"> 
<input type="file" name="DocFile"/>
<input type="submit" id="upload" value="Upload"/>
</form>

<div class="progress">
<div class="bar"></div >
<div class="percent">0%</div >
</div>
<div id="status"></div>

我将表单验证消息存储在 PHP 数组中,并将这些消息输出到我的上传脚本中的预定义 div。

xhr.responseText#status div 中输出 PHP 验证消息,但它会导致出现重复的表单,如所附屏幕截图所示。

知道这里出了什么问题吗?

【问题讨论】:

  • 你能显示你的html代码吗?
  • 我编辑了我的问题。你可以在那里看到html部分。
  • &lt;form id="#Myform" remove '#'
  • 你还没有结束你的标签
  • 这是一个错字。我没有将#Myform 存储在变量中。

标签: php ajax forms xmlhttprequest progress-bar


【解决方案1】:

您的 PHP 功能(基于 action="&lt;?php echo $_SERVER["PHP_SELF"]; ?&gt;")与您的其他 html(以及您的上传表单等)在同一页面上。 AJAX-Functionality 基本上只是加载带有表单参数的链接文件,并使用 PHP 执行后的全部内容作为结果。在您的情况下,内容包括您的回复以及您的表单。

现在如何解决这个问题?最简单的方法是在另一个文件中定义您的 PHP 并链接到该文件。为此,请将action="upload.php" 添加到您的&lt;form&gt;-Tag。然后创建一个新的 PHP-File:

上传.php

if(isset($_POST)) {
    ...
    echo "47";
}

【讨论】:

  • 这不会导致阻止输出responseText 最终导致停止输出PHP 验证消息吗?在开发人员视图中,我看到,目前 ajax 调用从 '
    ' 传递到 '
    ' 然后返回'
    ' 到 responseText 以及嵌套在同一 div 中的重复表单和进度条。看来responseText返回的是表单和进度条的副本。
  • 啊,对不起,我没有注意到第二个表单只有在第一个表单提交后才会出现。在那种情况下,你能提供你的 PHP 代码吗?
  • 我想我找到了你的问题:查看我的更新答案
  • xhr.responseText 无法以这种方式进行任何输出。我猜可能有任何预定义的函数、选项或属性来处理这类问题。我看到JSON 通常用于在这种情况下输出“PHP”验证,尽管我正在寻找它的 javascript 或 ajax 解决方案..
  • form元素发起之后,ajax响应仍然从&lt;body&gt;&lt;div id="status"&gt;&lt;/div&gt;&lt;/body&gt;开始,传递到&lt;html&gt;&lt;html/&gt;,然后通过xmlhttpresponseText返回到&lt;body&gt;&lt;div id="status"&gt;&lt;/div&gt;&lt;/body&gt;以及重复的表单和进度条嵌套在同一个 div 中。
猜你喜欢
  • 2012-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多