没有设置Ajax jQuery POST变量

时间:2014-03-30 21:03:18

标签: jquery ajax arrays post

问题:

我这样做一个ajax调用:

$.ajax({
    type: "POST",
    url: "cms/php/UploadAjax.php",
    data: {
        Images: Images
    },
    dataType: "html",
    success: function (data) {
        console.log(data);
    },
    error: function (data) {
        console.log(data);
    }
});

Images的结构如下:

Array
{
    [0]=> Array
    {
        [0]=>"test1.png"
        [1]=>"someDataUrl1"
    }
    [1]=> Array
    {
        [0]=>"test2.png"
        [1]=>"someDataUrl2"
    }
}

在我的本地服务器(Windows / EasyPHP)上,我可以正常访问$_POST['Images'],例如

<?php
    if(isset($_POST['Images']))
    {
        foreach($_POST['Images'] as $image)
        {
            ////do something with $image[0], $image[1]
            if (!preg_match('/data:([^;]*);base64,(.*)/', $image[0], $matches)) 
        {
            die("error");
        }
        // Decode the data
        $content = base64_decode($matches[2]);


        header('Content-Type: '.$matches[1]);
        header('Content-Length: '.strlen($content)); ////Removing it resolved the issue
        $imagename=utf8_decode($image[1]);
        $path="../../galleryimages/".$imagename;
        $mysqlpath="galleryimages/".$image[1];
        file_put_contents($path,$content);

        }
    }
    else
        echo "something";
?>

问题是,这不适用于我的在线服务器。它给出了警告:

POST http://myurl.com/... net::ERR_CONTENT_LENGTH_MISMATCH 

如果我再添加:

contentType:"html/text"

到我的ajax电话,我没有收到任何错误,但成功处理程序中的console.log(data);给了我&#34; 某些东西&#34;,它告诉我$_POST['Images']未设置。添加contentType后,它既无法脱机也无法在线工作。

提前致谢。

2 个答案:

答案 0 :(得分:0)

希望这会对你有所帮助。这将把数组转换成json,这是php可以解码并用作数组的东西。

var ImageJSON = JSON.stringify(Images);

  data: {
     Images: ImageJSON,
  }

发送之前。

if(isset($_POST['Images']))
    $Images = json_decode($_POST['Images']);

    foreach($Images as $image) {

答案 1 :(得分:0)

我解决了它:删除

   header('Content-Length: '.strlen($content)); 

解决了这个问题(另见我的问题)。