2014-03-30 64 views
0

問題:阿賈克斯jQuery的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);從成功處理程序給我「東西」這告訴我沒有設置$_POST['Images']。隨着contentType的增加,它既不能在線下工作,也不能在線工作。

在此先感謝。

+0

將dataType表單「html」更改爲「json」 – Robin

回答

0

我解決了這個問題:刪除

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

解決了這個問題(見我的問題)。

0

希望這可以幫助你。這將把數組轉換成json,這是php可以解碼並用作數組的東西。

var ImageJSON = JSON.stringify(Images); 

    data: { 
    Images: ImageJSON, 
    } 

在您發送之前。

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

    foreach($Images as $image) {