0

我有一个表格,其中一个输入作为文件上传。我有一个 php 脚本,我用 jquery ajax 调用它来验证其他表单字段并在表单上方的 div 中显示错误消息。它使用 .html() jquery 函数执行此操作,该函数基于与以下脚本非常相似的 php 回显。

我还创建了一个 php 脚本来验证文件上传,如下所示:

<?php

    $errorList = array();
    $inc = 0;


    $allowedExt = array("jpg", "jpeg", "gif", "png");
    $fileExt = end(explode(".", $_FILES['imgUpload']['name']));
    if((($_FILES['imgUpload']['type'] == 'image/gif')
     || ($_FILES['imgUpload']['type'] == 'image/pnjpeg')
     || ($_FILES['imgUpload']['type'] == 'image/jpeg'))
     && ($_FILES['imgUpload']['size'] < 2000000)
     && in_array($fileExt, $allowedExt)){
    if($_FILES['imgUpload']['error'] > 0)){

        $errorList[$inc++] = '<span class="error"> File error:'. $_FILES['imgUpload']['error'].'</span>';
    }

    }
    else{
    $errorList[$inc++] = '<span class="error"> Invalid file </span>';

    }

    echo '<ul class="errorList">';
    for($i =0; $i<$inc; $i++){
        echo $errorList[$i];

    }
    echo '</ul>';


?>

我希望此脚本中的错误消息以与其他脚本类似的方式显示,但据我所知,文件上传不能使用 ajax 完成。

有人对我如何解决这个问题有任何建议吗?

4

1 回答 1

0

Ajax 无法上传文件。但是你可以使用 IFrame 让它看起来像 Ajax。

您的选择是:

  • 隐藏的 iframe 技巧,由 Google 推广。自己实现这个可能会导致一些笨拙的东西,所以有一些库,比如 jQuery,它有插件,比如 jQuery 流行的 Form Plugin,可以自动执行此操作,因此您在使用它时不必感到内部肮脏。
  • 使用 Flash 来促进该过程。最值得注意的是 SWFUpload 非常受欢迎。在所有条件相同的情况下,我可能会使用 Javascript 解决方案来解决这个问题,但我过去曾成功使用过它。这个解决方案最酷的地方在于它带有更好的界面,例如加载指示器和缩略图等。但是,此时您要求用户使用 Flash + Javascript,这在某些情况下可能不起作用。
  • 使用 Silverlight 代替 Flash,尽管我并不认为这是一个可行的解决方案,因为它的渗透率比其他两种解决方案低得多。

如需您的帮助,请参阅此示例

http://www.anyexample.com/programming/php/php_ajax_example__asynchronous_file_upload.xml

它正在使用 iframe 选项

于 2012-09-04T04:13:42.563 回答