Php 如何使用AJAX上传文件

Php 如何使用AJAX上传文件,php,javascript,jquery,ajax,ajax-upload,Php,Javascript,Jquery,Ajax,Ajax Upload,我目前正试图通过使用jQuery制作的表单上传一个文件。这就是我试图做的: function ajax_upload(){ var formData = new FormData($('form#userform')); $.ajax({ url: location.protocol + "//" + location.host + "/profile/uploadPicture", dataType: 'json',

我目前正试图通过使用jQuery制作的表单上传一个文件。这就是我试图做的:

    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对象的形式从上传的文件返回文件名时,如: echo json_编码(数组('status'=>$status,'msg'=>$msg))

有什么不对劲吗?
请告诉我我是这样做的。如果您想了解更多信息,而不仅仅是我粘贴的代码,请查看这篇文章,因为我的代码是为拖放文件编写的

        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);

            });
        },
handleFiles:函数(文件、evt、目标)
{
控制台日志(目标);
$.each(文件、函数(索引、值)
{
var文件=值;
reader=newfilereader();
reader.onload=函数(evt)
{
var li=$(“
  • ”; target.find('.imagesList').append(li); var request=new XMLHttpRequest(); var formData=new formData(); formData.append('image',file); 打开(“Post”,settings.uploadImageUrl); request.addEventListener(“加载”,函数(evt) { var id=evt.target.responseText; li.removeClass(“上传”); li.find('img').attr('data-image-id',id); },假); 请求。发送(formData); }; reader.readAsDataURL(值); }); },
    虽然您没有说问题出在哪里,但出于所有目的和目的,我们都应该将内容保留在jQuery的范围内
    var formData=newformdata($('form#userform')
    应该是
    var formData=$('form#userform')。serialize()
    -这将确保数据以字符串形式发送到服务器,如
    name=george&email=george@george.com&validated=1
    …或者无论您的输入字段/值是什么…我也提到过,错误是什么?您不能直接通过javascript上传,因为这存在安全风险,浏览器级别的策略不允许这样做。有一些变通方法,包括闪光灯、iFrame、齿轮、插座和其他各种技术。但总的来说,我认为flash是你最好的候选人。这也很可能是您无法获得任何上传工作的原因。是的,表单将发布,但不会像您预期的那样通过传统的AJAX方式与文件一起发布。查看plupload它是一个jquery上传程序,设计非常基础,但效率很高。这类问题在过去两天内被问了3-4次。我敢肯定,在过去两天里,很多人都问了几十次。但是说“嘿,这个问题已经被问过了”是没有帮助的,如果你得到了一个链接到一个已经被回答的问题,以“可能被愚弄”的形式输入,那么提供这个链接并提供帮助