在JQuery中传递多个数据

时间:2015-11-03 17:32:46

标签: php jquery ajax

我是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);
    }


?>

感谢任何帮助。谢谢:))

1 个答案:

答案 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'
});