2016-01-13 70 views
0

我試圖通過AJAX傳遞一些JSON到PHP腳本,這裏是我的javascript:JSON不是通過AJAX POST傳遞

jQuery(document).ready(function($) { 
    /** 
    * AJAX add to cart 
    */ 
    $(".single_add_to_cart_button").each(function() { 

    var el = $(this); 

    el.click(function(e) { 
      var product_data = $("#jsonVariations").val(); 

      e.preventDefault(); 

      $(this).text('Adding to cart'); 

      // try ajax 

      $.ajax({ 
       url: myAjax.ajaxurl, 
       type: "POST", 
       data: { 
        action: 'add_bv', 
        product_data: product_data, 
       }, 
       dataType: "json", 
       //contentType: "application/json", 
       success: function (result) { 
        el.text("Added to cart"); 
       }, 
       error: function (xhr, ajaxOptions, thrownError) { 
        el.text("Not added to cart"); 
        //alert(xhr.status); 
        alert(thrownError); 
       } 
      }); 


     return false; 

    }); 

}); 

}); 

的JSON是有效的(通過jsonlint測試),並服用點是這樣的:

`[{"variationQty":5,"variationID":"50","variationSize":"2xl","variationColour":"grey"},{"variationQty":10,"variationID":"51","variationSize":"2xl","variationColour":"navy"}] 

我的PHP腳本是:

$product_data = $_POST['product_data']; 
    $product_data = json_decode($product_data, true); 

    foreach ($product_data as $product) { 
      $product_qty = intval($product->variationQty); 
      $product_id = 24; 
      $product_variation_id = $product->variationID; 
      $product_variation = array(
       'colour' => $product->variationColour, 
       'size'  => $product->variationSize, 
      ); 
      WC()->cart->add_to_cart($product_id, $product_qty, $product_variation_id, $product_variation);  
    } 

我已經造模設置$product_data瓦里能夠手動的JSON和完美的作品,由於某種原因,它不會通過JSON正確。我也嘗試使用JSON stringify並設置內容類型,當發生這種情況時,我得到AJAX成功函數,但php腳本似乎並沒有執行。

+0

echo your variable @rhysclay –

+0

you mean echo $ product_data? – rhysclay

+0

要在JSON –

回答

0

感謝@vsogrimen我確定問題是在PHP方面。出於某種原因,JSON對象的引號已經被轉義。我更新了我的代碼以去掉這些斜槓,它的功能非常完美。這是我的最終代碼:

function prefix_ajax_add_bv() { 


$product_data = stripslashes($_POST['product_data']); 
$product_data = json_decode($product_data, false); 


foreach ($product_data as $product) { 

     $product_qty = intval($product->variationQty); 
     $product_id = 24; 
     $product_variation_id = $product->variationID; 
     $product_variation = array(
      'colour' => $product->variationColour, 
      'size'  => $product->variationSize, 
     ); 
     WC()->cart->add_to_cart($product_id, $product_qty, $product_variation_id, $product_variation, array('_my_data','000000000000000000000000000000'));  
} 

} 
0

我想是這樣的: json_decode($product_data, true)在返回的數組,而不是一個對象。它可以是json_decode($product_data)json_decode($product_data, false)。 希望我能幫助你。

0

元素ID在整個文檔中應該是唯一的。

是隻有一個與jsonVariations ID DIV

+0

是它的獨特 - 那部分工作正常 – rhysclay

0

我的錯誤我還沒有完全理解這個問題。

POSTINGjson encoded數據使用AJAX,當它到達服務器它已經轉化爲$_POST[...]陣列

$_POST將是:

$_POST: 
array(
    'action' => 'add_bv', 
    'product_data' => array(...the content of product_data...) 
); 

在你的情況,我想你沒有解碼發佈的json數據,因爲你只需要按原樣使用它。

$product_data = $_POST['product_data']; //Correct, allready an array 

$product_data = json_decode($product_data, true); //Not needed 
+0

THanks @vsogrimen - 仍然出現錯誤:SyntaxError:JSON.parse:JSON數據第1行第1列的意外字符 – rhysclay

+0

@rhysclay請嘗試再次檢查我的答案。嘗試使用print_r()或任何方式檢查$ _POST ['product_data']中的內容;已經? – vsogrimen