2016-01-13 2 views
0

Я пытаюсь передать некоторые JSON в PHP скрипт через AJAX, вот мой 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) и somehting, как это:

`[{"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 VARI умеет вручную использовать json, и он отлично работает, по какой-то причине он не будет правильно передавать JSON. Я также попытался использовать JSON stringify и установить тип содержимого, когда это произойдет, я получаю функцию успеха AJAX, но скрипт php, похоже, не выполняется.

+0

echo your variable @rhysclay –

+0

Вы имеете в виду 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

Идентификаторы элементов должны быть уникальными в пределах всего документа.

есть только один DIV с jsonVariations ID

+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: неожиданный символ в строке 1 столбец 1 данных JSON – rhysclay

+0

@rhysclay попробуйте снова проверить мой ответ. Попробуй свой чекинг с помощью print_r() или любым способом проверить, что находится в $ _POST ['product_data']; уже? – vsogrimen

Смежные вопросы