我试图使用ajax将图像上传到服务器并且它有效,现在问题是从AJAX返回数据,它继续使用responText提供undefined。
$('#imageform').submit(function(e){
var formData = new FormData(this);
var request = $.ajax({
url: "<? echo site_url('mybazaar/uploadProductImage'); ?>",
type: "POST",
data: formData,
contentType: false,
processData: false,
success: function (res) {
var newImage = $(res).filter('#ajaximage').html();
$('#ajax_product_image').append(newImage);
alert(res.responseText);
},
error: function (request, status, error){
alert(error);
}
}).done(function(){
});
e.preventDefault();
});
PHP文件:
public function uploadProductImage(){
$config['upload_path'] = './images/product_images/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = 10024;
$config['max_width'] = 10240;
$config['max_height'] = 10240;
$upload_path = 'images/product_images/';
$this->load->library('upload', $config);
if (!$this->upload->do_upload("product_image_primary")){
return false;
}
else{
$data = array('upload_data' => $this->upload->data());
$this->resize($data['upload_data']['full_path']);
echo "<div id='ajaximage'><div class='col-md-2'><img src='".base_url().$upload_path.$data['upload_data']['file_name']."'></div></div>";
}
}
但是,如果我只做#34; alert(res)&#34;,整个页面的HTML都会收到警报,包括我在&#34; mybazaar / uploadProductImage&#34;中回应的文字。< / p>
我顺便使用Jquery 1.9和CodeIgniter。
答案 0 :(得分:1)
success
回调的第一个参数是以content-type标头指定的格式从服务器返回的实际数据,默认情况下为html,在您的情况下也是如此。现在您正在获取html,您不必使用filter('#ajaximage')
搜索div
因为这正是你在res
中所拥有的(div#ajaximage),所以你可以直接将它附加到你的DOM中。
success: function (res) {
$('#ajax_product_image').append(res);
}
我删除了alert(res.responseText)
,因为responseText
不是成功回调的data参数中定义的属性,它是用于触发Ajax调用的实际XMLHttpRequest
对象的属性。如果仍然需要访问responseText,则成功回调有3个参数function(data, status, jqXHR). jqXHR(3rd argument basically, you can change the name if you like) will have all the underlying properties of original
XMLHttpRequest` object