如何使用AJAX正确发送FormData()

时间:2016-03-02 05:31:10

标签: php jquery ajax form-data

当我尝试从 LTS服务器不在我的本地计算机)上发送带有AJAX的FormData时,似乎存在问题。我怀疑所有浏览器都不支持FormData,但它在我的本地计算机上完全可以使用我在服务器(LTS)上尝试时使用的浏览器。我在这里有点迷失,不知道该怎么做。

进一步解释:

索引

<form class="image" enctype="multipart/form-data" accept-charset="utf-8" method="post">
    <input id="image-value" data-id="{{id}}" name="{{picture}}" class="image-box-{{id}}" data-type="{{type}}" type="file" value="{{picture}}" />
    <p id="{{id}}" class="label" >Update</p>
</form>

我需要在此处获取文件并将其上传到服务器目录

脚本

$('[id="image-value"]').change(function(e) {

var data = new FormData();
var file_data = this.files[0];
data.append('file', file_data);

e.preventDefault();
$.ajax({
    url: './someController/upload_picture/',
    type: 'POST',
    data: data,
    cache: false,
    contentType: false,
    processData: false,
    dataType: 'json',
    success: function(data){
        if (data.success == true) {
            console.log(data.image_name);
        } else {
            var error = data.error_message;
            $(".question-message").fadeIn("fast").html(error);
        }
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.error("The following error occured: " + textStatus, errorThrown);
    }
});

});

控制器

function __construct() {
    parent::__construct();
    $config['upload_path'] = './data/picDir/';
    $config['allowed_types'] = 'gif|jpg|png|jpeg';
    $config['overwrite'] = TRUE;
    $this->load->library('upload', $config);
    $this->upload->initialize($config);
}
function upload_picture() {
    if ($this->check_authorization()) {
        if ($this->ion_auth->get_user_id()) {
            if ($this->upload->do_upload('file')) {
                $data = $this->upload->data();
                echo json_encode(array(
                    "image_name" => $data["file_name"],
                    "success" => true
                ));
            } else {
                echo json_encode(array(
                    "success" => false,
                    "error_message" => $this->upload->display_errors()
                ));
            }
        }
    }
}

触发时,请求只是等待来自php控制器的响应,我认为没有响应。

1 个答案:

答案 0 :(得分:0)

我相信你的回声json_encode ......&#34;应该在响应中 - 类似于$ this-&gt;响应(json_encode ...)。 echo不会返回对ajax请求的响应。请检查您的框架或库以获得正确的响应并分享。