使用jQuery和Ajax上传文件

时间:2012-10-03 11:01:35

标签: php jquery ajax symfony

我有一个表单,我使用jQuery $.post方法发送到服务器。我发送了几个字段,如:

var myName = "Pedro";
var myDescription = "Description of Pedro";

$.post("~/insert_user", { name: myName, description: myDescription }, function(data){
    alert("Successfully inserted " + data.name + " in DB");
}, "json");

这很有效,因为我在insert_user.php中取值并处理并插入数据库中。

如果我需要在表单中添加字段以让用户上传图片,该怎么办?

我如何在$.post电话中这样做?如何在PHP中获取它?

顺便说一下,我正在使用Symfony2.0,以防万一它发生变化。但重要的是如何将文件类型字段添加到ajax调用。

提前致谢。

佩德罗

4 个答案:

答案 0 :(得分:1)

你会发现使用预先构建的jquery插件要容易得多。我最喜欢的是uploadify http://uploadify.com

它简单易用,它可以节省你很多时间试图找出你自己的方法<>

$ .post与下面的代码块相同。为了让你做你需要的事情,你需要改变它以至少使用它,然后事情会变得更简单。首先将$ .post更改为此

$.ajax({
  type: 'POST',
  url: url,
  data: data,
  success: success,
  dataType: dataType
});

然后在ajax块中添加一个参数contentType:“multipart / form-data”或者尝试mimeType(不能记得那么清楚)和数据:$(“#form”)。serialize(),这应该有效。

请告诉我它是否无效

- NEW EDIT LOL--请原谅我的盲码,你可能需要测试一下

我做了一些研究并发现了这个。您需要构建此数组并将其添加到ajax块中的数据

var files = new FormData($('#fileinputid'));     
jQuery.each($('#fileinputid')[0].files, function(i, file) {
    files.append(i, file);
});

如果我读到的内容是准确的,你应该能够使用其余的ajax数据传递该数组。虽然我不完全确定如何将其添加到序列化数据。

请测试一下并告诉我。如果它不起作用,请为您完成一个完整的JavaScript脚本测试,然后在此处发布

答案 1 :(得分:0)

本教程可能有所帮助:Nettuts+: Uploading Files With AJAX

答案 2 :(得分:0)

制作iframe并在其中填写表格,提交表格并瞧。或者您可以使用其中一个AJAX File upload scripts

答案 3 :(得分:0)

我终于使用了这个:

http://malsup.com/jquery/form/#faq

它非常适合我需要的东西。

谢谢你们的帮助。