2011-12-12 62 views
1

我有一个HTML表单,以前只用于用户的文本属性,这是所有使用AJAX通过URL调用PHP控制器函数来刷新页面内容通过数据库和服务器端调用(删节版)PHP jQuery .ajax()文件上传服务器端理解

<input type="text" id="firstname" name="FIRSTNAME"/> 
<input type="text" id="lastname" name="LASTNAME"/> 
<input name="Submit"type="submit" value="Submit" /> 

这种“创建用户”的形式现在需要整合文件上传机制,为

<input type="file" name="userImage" /> 

的问题是,形式正在通过用户提交的图片.serialize.ajax#创建表单提交

 $.ajax({ 
      url: 'controller.php?command=create', 
      type: 'POST', 
      data: $(form).serialize(), 

创建URL调用PHP控制器echo $dmv->create();,这是模型公共function create(){ //execute database insert and execute

我已阅读,连载没有意义的文件,这是真的,但我也想试图找出如何更新我现有的表单,以合并文件上传功能

我试图了解jquery.form.js插件(http://malsup.com/jquery/form/#file-upload),但无法理解如何将它们结合在一起。

我相信我需要做的是将文件上传作为一个单独的逻辑执行,然后再与原始文件名逻辑联系起来,这是文件存储与唯一映像名称存储在数据库下的记录,不是BLOB图像存储。

让我知道,如果我可以提供任何进一步的信息,并感谢任何可以给予的帮助。

+0

您无法使用ajax调用进行上传。获得ajax感觉的唯一方法是使用框架提交onchange文件。然后返回图像作为结果。 – Michael

+0

我知道如何用ajax和javascript做这个(我不知道jquery)。这会有帮助吗? –

+0

是的。我想我对PHP处理文件上传感兴趣,但是提交之前或之后仍然处理其他表单值。我无法绕过我的头说如何说jQuery插件的结果可以使用一次提交,或如何完成文件上传与这些值 –

回答

0

下面是Michael正在谈论的一个例子。 http://www.phpletter.com/Our-Projects/AjaxFileUpload/

+0

这是我对迈克尔的反应,但我似乎无法对他作出反应。所以这是一个答案... – jivanrij

+0

那是什么? AjaxFileUpload? 这个链接不通过Ajax提供文件上传功能, 他们正在提出整个发布请求和刷新整个页面。 –

1

您无法通过AJAX上传文件。您唯一可能使用Flash(例如Uploadify:http://www.uploadify.com/),iFrame或仅提交表单。该表单必须具有设置为multipart的enctype。

<form action="script.php" method="post" enctype="multipart/form-data"> 

插件可能通过创建一个“隐藏的”iframe来模仿AJAX文件上传。 示例:http://valums.com/ajax-upload/

+0

我不能通过ajax上传文件,但有没有办法通过AJAX调用php脚本来上传?我已经完成了多次能够提交表单并使用php编写文件,但在这个特定的实例中,因为整个应用程序都是通过php调用通过ajax加载的,所以我不能通过通常的POST来刷新页面。所以不一定是处理文件上传的ajax,而是调用php处理程序的ajax –

+0

如果您问是否可以提交AJAX文章,请回电PHP脚本,让它抓取文件并上传它是可能的,答案是否定的。PHP是后端处理语言,这意味着它将处理您发送给它的内容,并回显(打印)任何输出。它不能处理该范围之外的事物。为了使您的上传工作像AJAX一样,您需要使用Flash或iframe,如上所述。它模仿AJAX类似的功能,但实际上并不是AJAX。 (因为你无法使用AJAX上传文件) –

1

您可以使用隐藏的iframe来模仿AJAX调用。你甚至可以实现一个回调函数,并得到就像一个AJAX调用服务器响应:

HTML -

<form enctype="multipart/form-data" target="workFrame"></form> 
<iframe id="workFrame" style="display:none;"></iframe> 

JS--

//bind an event handler to the form with the file input 
$('form').on('submit', function() { 

    //check to make sure the user has selected an image, if not then stop the form from submitting 
    if ($('#userImage').val().length == 0) return false; 

    //bind an event handler to the `load` event for the iframe so we will have a callback for the form submission 
    $('#workFrame').on('load', function() { 
     var $this = $(this); 

     //remove this event handler 
     $this.off('load'); 

     //get the response from the server 
     var response = $this.contents().find('body').html(); 
     //you can now access the server response in the `response` variable 
    }); 

    //return true so the form submits normally 
    return true; 
}); 

注意.on()在jQuery的1.7是新的在这种情况下与.bind()相同。

相关问题