![](/img/trans.png)
[英]Passing JSON to a Controller with Multiple Models and/or Parameters via AJAX POST
[英]JSON not passing via AJAX POST
我試圖通過AJAX將一些JSON傳遞給php腳本,這是我的javascript:
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
字符串化並設置內容類型,當發生這種情況時,我獲得了AJAX
成功函數,但php腳本似乎未執行。
我想這是: json_decode($product_data, true)
返回數組,而不是對象。 它可以是json_decode($product_data)
或json_decode($product_data, false)
。 希望我能為您服務。
元素ID在整個文檔中應該是唯一的。
只有一個div具有jsonVariations ID
我的錯誤我還沒有完全理解問題。
在POSTING
json 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
感謝@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') );
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.