我是Ajax的新手,我试图将多个变量传递给我的PHP文件,但它并没有真正起作用。基本上问题是,当我传递多个变量时,它会停止工作。我在下面详细解释。
这是我的ajax代码的片段。我用这个来上传文件:
var mdata = new FormData();
mdata.append('image_data', $(this)[0].files[0]);
var id = $id //$id is passed inside my function. Just assigning it but not necessary
jQuery.ajax({
type: "POST", // HTTP POST
processData: false,
contentType: false,
url: "includes/ul.php", //Ajax Calls here
data: mdata, //Form variables
dataType: 'json',
以上代码段有效。如您所见,我只传递mdata
。
现在,当我尝试传递多个数据时会出现问题。上传停止工作。我试图发送一封我$_POST
的电子邮件,我得到一个空数组。下面是我尝试过的无效代码:
data: {mdata: mdata, "prodID":id} //See how I pass multiple variables now
这是我的PHP代码。基本上当我传递mdata
时,一切都有效,如第一个代码片段所示。然而,使用多个变量它不起作用(即我的$ _POST)没有得到值,甚至上传也不起作用:
<?php
$fullSize = "../prod/full_size/";
$thumb = "../prod/thumb/";
$_thumb = "prod/thumb/";
$image_height = 520;
$image_width = 650;
$id = $_POST["prodID"];
//gets image size info from a valid image file
$image_size_info = getimagesize($_FILES['image_data']['tmp_name']);
//initiate ImageMagick
$image = new Imagick($_FILES['image_data']['tmp_name']);
//Upload Full size
$image->writeImages($fullSize. $_FILES['image_data']['name'], true);
//Resize for thumb
if($image_type=="image/gif") //determine image format
{
//if it's GIF file, resize each frame
$image = $image->coalesceImages();
foreach ($image as $frame) {
$frame->resizeImage( $image_height , $image_width , Imagick::FILTER_LANCZOS, 1, FALSE);
}
$image = $image->deconstructImages();
}else{
//otherwise just resize
$image->resizeImage( $image_height , $image_width , Imagick::FILTER_LANCZOS, 1, FALSE);
}
//write image to a file
$results = $image->writeImages($thumb. $_FILES['image_data']['name'], true);
//output success response
if($results){
$response = json_encode(array('type'=>'success', 'msg'=>'Success'));
die($response);
}
?>
感谢任何帮助。谢谢:))
答案 0 :(得分:5)
问题是因为您需要将FormData
直接传递给$.ajax
调用,而不是包含在对象中。您可以使用append()
FormData
方法为其添加其他字段:
var mdata = new FormData();
mdata.append('image_data', $(this)[0].files[0]);
mdata.append('prodID', id); // < data appended here
jQuery.ajax({
type: "POST", // HTTP POST
processData: false,
contentType: false,
url: "includes/ul.php", //Ajax Calls here
data: mdata, //Form variables
dataType: 'json'
});