我试图通过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
stringify并设置内容类型,当发生这种情况时,我得到了AJAX
成功函数,但php脚本似乎没有执行。
答案 0 :(得分:0)
我猜这是:
json_decode($product_data, true)
返回数组,而不是对象。
它可以是json_decode($product_data)
或json_decode($product_data, false)
。
希望我能帮到你。
答案 1 :(得分:0)
元素ID在整个文档中应该是唯一的。
是否只有一个带有jsonVariations ID的div
答案 2 :(得分:0)
我的错误我还没有完全理解这个问题。
在使用ajax的POSTING
json encoded
数据中,当它到达服务器时,它已经转换为$_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
答案 3 :(得分: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') );
}
}