Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/228.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JSON未通过AJAX POST传递_Javascript_Php_Jquery_Json_Ajax - Fatal编程技术网

Javascript JSON未通过AJAX POST传递

Javascript JSON未通过AJAX POST传递,javascript,php,jquery,json,ajax,Javascript,Php,Jquery,Json,Ajax,我试图通过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_d

我试图通过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\u data
变量手动设置为json,它工作得很好,由于某些原因,它无法正确传递
json
。我还尝试过使用
JSON
stringify并设置内容类型,当出现这种情况时,我会得到
AJAX
success函数,但php脚本似乎没有执行。

我想这是:
json\u decode($product\u data,true)
返回数组,而不是对象。 它可以是
json\u decode($product\u data)
json\u decode($product\u data,false)

希望我能帮助您。

元素ID在整个文档中应该是唯一的


是否只有一个div具有jsonVariations ID

我的错误我还没有完全理解这个问题

在使用ajax的
发布
json编码的
数据中,当数据到达服务器时,它已经转换为
$\u POST[…]
数组

您的
$\u帖子将是:

$_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') );    
}

}

echo您的变量@rhysclaye您的意思是echo$product\u数据?您想在json中传递的是当我echo[{\'variationQty\':3,\'variationID\':\'44\',\'variationSize\':\'2xl\',\'variationcolor\':\'black\']0时出现的内容-这是在json解码之前,当json传递给php时,所有引号都会转义!这似乎就是问题所在。谢谢@vsogrimen-仍然会得到一个错误:SyntaxError:JSON.parse:JSON的第1行第1列出现意外字符data@rhysclay请再次检查我的答案。您是否尝试过使用print_r()或任何方式检查$u POST[“产品数据”中的内容;已经?