将 JavaScript 变量传递给 PHP,然后传递给 woo commerce 支持的电子商务网站中的购物车和订单项

Posted

技术标签:

【中文标题】将 JavaScript 变量传递给 PHP,然后传递给 woo commerce 支持的电子商务网站中的购物车和订单项【英文标题】:Pass JavaScript variable to PHP and then to cart and order line items in woo commerce powered e-commerce site 【发布时间】:2021-03-06 19:28:19 【问题描述】:

我开始在 woocommerce 中进行开发不久。我可能不知道 woocommerce 的局限性,所以当我解释我的问题时请多多包涵。

我想创建一个产品定制器。对于仅应要求提供的产品(家具)。这就是我所做的前端。 https://skmfurniture.com.au/KAALIKA/product/blow-me-away/

我创建的是一个使用 SVG 改变颜色的产品(因为它的变体有超过 2k 种颜色,创建图像还不够)。它有价格、皮革/物品类型、主色、强调色、尺寸、床垫价格和保修价格。

问题: 您可以启动控制台并查看我成功记录的 javascript 变量。我使用 ajax 将 javascript 变量更改为 php 变量,然后尝试将其插入购物车。由于这一切都是在 woocomerce 的单一产品页面中的模态中完成的,因此在我提交值时会显示“请选择产品选项”消息。

这是使用的ajax代码:

    // adding to cart
    $('#addToCart a').click(function(e) 
    
     $.ajax(
            type: "POST",
            data:                              
                chase: chase,
                item : item,
                price: price,
                size: size,
                mainHex: mainHex,
                accentHex: accentHex,
                mattress: mattress,
                warranty: warranty,
                action: 'your_ajax_function'  
            ,
            contentType: 'application/x-www-form-urlencoded; charset=UTF-8',
            dataType: "text",
            success: function (msg) 
                console.log("Chase", chase);
                console.log("Price", price);
                console.log("Item", item);
                console.log("Size", size);
                console.log("Main Color", mainHex);
                console.log("Accent Color", accentHex);
                console.log("Matt", mattress);
                console.log("Warr", warranty);
            ,
            error: function (errormessage) 
                  console.log( "ERROR in ajazx" );
            
      );
    
     window.location.replace("https://skmfurniture.com.au/KAALIKA/cart/");
    );
    

下面是 function.php 文件的样子:

// getting values from ajax into php
add_action('wp_ajax_nopriv_your_ajax_function','your_ajax_function'); // Ajax Function should be hooked like this for unauthenticated users
add_action('wp_ajax_your_ajax_function','your_ajax_function'); 

  function your_ajax_function()

    $price = $_POST['price'];
    $chase = $_POST['chase'];
    $item = $_POST['item'];
    $price = $_POST['price'];
    $size = $_POST['size'];
    $mainHex = $_POST['mainHex'];
    $accentHex = $_POST['accentHex'];
    $mattress = $_POST['mattress'];
    $warranty = $_POST['warranty'];

    echo $chase;
    echo $item;


  
 

我已经编写了将它们放入购物车的函数,然后结帐,最后在后端订购商品,但不确定我在这些步骤中是否已经错了。我只是打印出是否通过了变量,但确定为什么我没有得到任何结果。

如果您能看一下并指导我正确的方向,将不胜感激。

【问题讨论】:

【参考方案1】:

问题

您正尝试在服务器上回显您使用 ajax 发布的值,但没有看到任何输出。

原因

在你的成功函数中,你是console.log(chase) 而不是msgmsg 是您传递给成功函数的参数,因此它是范围内的数据。

// 错误的方式!

success: function (msg) 
   console.log("Chase", chase);
,

示例

这应该会显示从服务器返回的字符串。

// 正确的方式!

success: function (msg) 
   console.log("Chase", msg);

专业提示

如果您无法按预期看到 DOM 中的值,请始终检查 Chrome 开发工具中的网络选项卡。您可以单击网络 -> 响应以查看来自服务器的响应。至少你会知道数据是否被返回。这将帮助您找出问题所在。

【讨论】:

感谢您的专业提示.. 我得到了整个 html 文档作为响应.. 有没有办法我可以得到我想要的变量? 做两件事,你能删除第二个echo,所以你只返回“追逐”。另外,在 PHP 函数内部,你能不能做mail("youremail", "test", chase); 来验证函数是否真的在运行并且接收到值“chase”。 另外,需要明确的是,这听起来像是在工作。由于您没有提供 URL,因此您正在向 SELF 发帖。所以从技术上讲,您会在响应中看到 HTML 页面。您只需要确保您正在访问您所依赖的值。在您的控制台日志中使用 msg 并验证您是否可以看到它们。此外,您必须从服务器返回数据,不能只将其分配给变量。最好的情况是创建 JSON,因此 msg 是一个 JSON 对象,包含从服务器返回的所有键值对。 我添加了 ajaxurl = '<?php echo admin_url( 'admin-ajax.php' ) ?>' 作为 url 并观看网络选项卡,我可以根据需要完美地看到响应。非常感谢您的帮助。 惊人而伟大的工作。如果你猜对了,请选择其中一个答案。不客气!

以上是关于将 JavaScript 变量传递给 PHP,然后传递给 woo commerce 支持的电子商务网站中的购物车和订单项的主要内容,如果未能解决你的问题,请参考以下文章

将 php 变量传递给 xmlhttp.responseText

如何从 Blade 格式 HTML 将 PHP 变量传递给 JavaScript 函数

Laravel 使用 AJAX 将 Javascript 变量传递给 PHP 并检索那些

通过 ajax 将 Javascript 变量传递给 PHP

使用 xmlhttprequest 将 javascript 变量传递给 PHP

将javascript变量传递给php [重复]