2012-08-07 62 views
-3

我目前正试图通过我使用jQuery制作的表单上传文件。这就是我试图做的事:你如何上传文件与AJAX

function ajax_upload(){ 
    var formData = new FormData($('form#userform')); 
     $.ajax({ 
     url: location.protocol + "//" + location.host + "/profile/uploadPicture", 
     dataType: 'json', 
     data: formData, 
     type: 'post', 
     success: function(data, status){ 
     if (data.status == 'error') { 
      $('#error').html(data.msg); 
     } 
     else { 
      var filename = location.protocol + "//" + location.host + "/data/profiles/" + data.msg; 

      $('input#filename').val(filename); 
      close_upload_form(); 
      pop_profilechanger(filename); 

     } 
    } 
}); 
    return false; 

}

形式出现张贴到后端,但在试图从上传的文件中JSON对象返回的文件名,如: 回声json_encode (array('status'=> $ status,'msg'=> $ msg));

有什么问题吗? 请告诉我

+1

虽然你没有说是什么问题,我们应该保持的东西所有意图和目的的jQuery范围。 var formData = new FormData($('form#userform'));'应该是'var formData = $('form#userform')。serialize()' - 这将确保数据被发送到服务器一个字符串,例如'name = george&email = george @ george.com&validated = 1' ...或者任何你的输入字段/值是...还有...我有没有提及,什么是错误? – Ohgodwhy 2012-08-07 02:15:52

+1

您无法通过javascript直接上传,因为它存在安全风险,浏览器级别的策略不允许。有解决方法,涉及闪光灯,iframe,齿轮,插座和其他各种技术。但总的来说,我认为闪光是你最好的选择。这也可能是为什么你没有得到任何上传工作。是的,表单将会通过传统的AJAX手段发布,但不会与文件一样。检查plupload其一个jQuery上传,多数民众赞成在设计上非常简单,但非常有效的 – chris 2012-08-07 02:41:08

+0

这样的问题被问3-4次最后两天 – 2012-08-07 02:43:29

回答

0

这是我要做的事。如果您想了解更多信息,而不仅仅是我粘贴的代码,看看这个http://www.html5rocks.com/en/tutorials/file/dndfiles/,因为我的代码是为拖发文件拖放

 handleFiles : function(files, evt, target) 
     { 
      console.log(target); 
      $.each(files, function(index, value) 
      { 
       var file = value; 

       reader = new FileReader(); 
       reader.onload = function(evt) 
       { 
        var li = $("<li class='uploading'><img data-image-id='0' src='" + evt.target.result + "' /></li>"); 
        target.find('.imagesList').append(li); 

        var request = new XMLHttpRequest(); 
        var formData = new FormData(); 
        formData.append('image', file); 

        request.open("Post", settings.uploadImageUrl); 
        request.addEventListener("load", function(evt) 
        { 
         var id = evt.target.responseText; 
         li.removeClass('uploading'); 
         li.find('img').attr('data-image-id', id); 

        }, false); 
        request.send(formData); 
       }; 

       reader.readAsDataURL(value); 

      }); 
     },