简体   繁体   English

上传文件和ajax / jquery失败

[英]Upload file and ajax/jquery fails

I'm trying to add a file upload function to a contact form, but it won't work for some reason. 我正在尝试将文件上传功能添加到联系表单,但是由于某些原因它无法正常工作。 The upload script works fine by itself, but when I add it to the contact code, the jquery script makes it fail. 上载脚本本身可以正常工作,但是当我将其添加到联系代码时,jQuery脚本使其失败。

As you can tell, I am by no means an expert. 如您所知,我绝不是专家。

pontact.php pontact.php

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
    <script type="text/javascript">
    $(function(){
        $('#contact_form').submit(function(e){
            e.preventDefault();
            var form = $(this);
            var post_url = form.attr('action');
            var post_data = form.serialize();
            $('#loader', form).html('<img src="loader.gif" /> Please Wait...');
            $.ajax({
                type: 'POST',
                url: post_url, 
                data: post_data,
                success: function(msg) {
                    $(form).fadeOut(500, function(){
                        form.html(msg).fadeIn();
                    });
                }
            });
        });
    });
    </script>
    </head>
    <body>
    <form action="process.php" method="post" id="contact_form">
        <div>
             <label for="name">Your Name:</label>
             <input type="text" name="name" id="name" value="" tabindex="1" />
        </div>
        <div>
             <label for="email">Your Email:</label>
             <input type="text" name="email" id="email" value="" tabindex="2" />
        </div>
        <div>
            <label for="message">Message:</label>
            <textarea cols="40" rows="8" name="message" id="message"></textarea>
        </div>
<div>
    <input type="hidden" name="MAX_FILE_SIZE" value="512000" />
    Send this file: <input name="userfile" type="file" />
</div>
        <div id="loader">
            <input type="submit" value="Submit" /> 
        </div>
    </form>
    </body>
    </html>

Process.php Process.php

$uploaddir = '/var/www/download/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

echo "<p>";

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
  echo "File is valid, and was successfully uploaded.\n";
} else {
   echo "Upload failed";
}

echo "</p>";
echo '<pre>';
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";

File upload doesnt work via jQuery even if you call form.serialize() . 即使您调用form.serialize()文件上传也form.serialize()通过jQuery进行。

You can achieve the same effect via hacks like using iFrames (good article here on this) or Flash based uploaders like Uploadify . 您可以通过黑客攻击(例如使用iFrames(此处的好文章 ))或基于Flash的上传器(例如Uploadify )来达到相同的效果。

By default you cant upload a file using ajax,( Why can't I upload files asynchronously? ) 默认情况下,您无法使用ajax 上传文件 (( 为什么我不能异步上传文件?

but there are a few techinques, including iframes or flash plugins you could use 但是有一些技术,包括您可以使用的iframe或Flash插件

Hope this helps 希望这可以帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM