0

我正在使用 AJAX 创建设置向导。这是一个多步骤的表单提交,总共 6 个步骤。步骤 1-5 工作正常,它们只是表单字段并且只提交文本。最后一步,第 6 步,将允许用户上传 7 张图片。此步骤不起作用。I get a 500 Internal Server Error

我是否通过 JSON 正确传递图像数据?还有什么我做错或忘记的事情吗?

相关代码如下:

HTML(仅适用于第 6 步)

<form action="/ajax/wizard.php/<?php echo $userName ?>?step=3" 
class="defaultRequest" enctype="multipart/form-data" method="post">

<input type="hidden" name="token" value="<?php echo $token; ?>"/>

<fieldset>
    <p><label>Profile Picture</label>
    <input type="file" name="pPic" value="" /></p>

    <p><label><a href="#help-username" class="show_helper"><span>(?)</span>
    Pic 1</a></label> <input type="file" name="Album1" value="" />
    </p>

    <p><label><a href="#help-password" class="show_helper"><span>(?)</span>
    Pic 2</a></label><input type="file" name="Album2" value="" />
    </p>

    <p><label>Pic 3</label>
    <input type="file" name="Album3" value="" /></p>

    <p><label>Pic 4</label>
    <input type="file" name="Album4" value="" /></p>

    <p><label>Pic 5</label>
    <input type="file" name="Album5" value="" /></p>

    <p><label>Pic 6</label>
    <input type="file" name="Album6" value="" /></p>

</fieldset>

<fieldset>
     <p><label>&nbsp;</label>
     <button type="submit"><span>Upload Images</span></button></p>
</fieldset>

JS

$.ajax({
type: 'POST',
url: requestUrl,
data: $(this).serialize(),
dataType: 'json',
success: function(data) {

            if(data.response){
                $('div.errormsg').remove();
                $(eventHeadline).html(data.eventHeadline);
                console.log(data.eventHeadline);
                //$(eventDate).html(data.eventName);

                if(data.step){
                    openStep(data.step);
                }else{
                        openStep('next');
                }
            }else{
                $('div.errormsg').remove();
                $('<div class="errormsg">'+data.message+"</div>").insertBefore(form);
            }
4

1 回答 1

1

文件字段不能方便地序列化为 JSON,为了上传它们,您需要创建一个可以使用 jQuery 上传的FormData对象,只要您阻止 jQuery 使用processData: false. 不过,这只适用于一些最新的浏览器:http: //caniuse.com/#search=formdata

为了支持使用 jQuery 为旧版浏览器/IE 上传文件,最好的办法是找到一个插件,使用标准 POST 上传文件并将其绑定回 jQuery 回调 - 这应该为您提供一些:https:/ /www.google.co.uk/search?q=jquery+file+upload+plugin

于 2012-08-08T06:50:23.880 回答