2012-09-18 92 views
1

我在Jquery中創建JSON文件,然後將其發送到php。在PHP我解碼,但我收到一條錯誤消息。下面是到達php和數組的錯誤消息的回聲。注:我只通過一個項目(以保持它小,但在進一步的將有數組中的多個項目:jquery + php - 使用JSON數組

enter image description here

這是當前的PHP代碼:

print_r($_POST['cropData']); 
    $cropData = json_decode($_POST['cropData']); 
    print_r($cropData); 

而且這裏是產生JSON數組jquery的:

 jsonArray[thumbNum] = [{'src':val.attr('src')}, 
          {'width':val.width()}, 
          {'height':val.height()}, 
          {'dataCX':val.attr('data-cx')}, 
          {'dataCY':val.attr('data-cy')}, 
          {'dataCW':val.attr('data-cw')}, 
          {'dataCH':val.attr('data-ch')} 
     ] 
     thumbNum++; 
    } 

    $.post('scripts/php/join_processing.php', { 
     'cropJoin': '1', 
     'cropData': jsonArray},    
     function(data) { 

任何建議對我做錯了什麼在這裏我我發送格式錯誤的JSON數組或不編碼它科爾ectly?

thx

+0

JSON.stringify(your_array); – donutdan4114

+0

@ donutdan4114:爲什麼? – zerkms

+0

@zerkms:如果您想通過POST傳遞JSON字符串。 – donutdan4114

回答

0

因爲jQuery.post()的數據參數是「智能猜測」,所以如果在jQuery.post()中傳遞JSON字符串或JS對象作爲數據參數,它已經將其作爲HTTP POST-數組而不是單個json字符串。 所以,你在php中接收到的是一個可用的數組,所以不需要對它進行解碼。

Btw;你可以很容易地看到這個,因爲你print_r的POST變量,它顯然打印它作爲一個數組而不是一個字符串。

0

你不需要解碼它 - 它已經是一個數組了。所以請隨時使用它。

$.post將它作爲數組傳遞,而不是作爲json字符串傳遞。

0

JavaScript中的數組與PHP中的數組不同。你可能不想發送一個JS數組,而是一個JS對象(它將變成一個PHP數組)。

試試這個代碼,而不是...

jsonArray[thumbNum] = { 
    src: val.attr('src'), 
    width: val.width(), 
    height: val.height(), 
    // .. 
}; 

雖然將轉化爲一個PHP對象roughtly這樣的:

array(
    array(
    "src" => "", 
    "width" => "", 
    "height" => "" 
), array(
    "src" => "", 
    "width" => "", 
    "height" => "" 
) 
); 

其他海報是你真的不ALSO權需要json_decode的一切,因爲$ .post會爲你正確轉換它。

0

您實際上並沒有在那裏創建JSON數組。 JSON是一個可以表示數組的字符串符號。您實際上正在創建一個常規的JavaScript數組。 $.post將正確地傳遞給你的PHP腳本,所以$_POST將被正確填充。根本不需要json_decode