通过表单动态发送JavaScript值

时间:2019-04-13 00:43:31

标签: javascript php jquery ajax

我不知道是否可能,但是我需要通过复选框值通过url内的表单ou发送一些信息。

下面的代码在产品循环内,并在每个产品上创建一个复选框(产品比较方法)。

就我而言,不可能在下面的表单中添加此代码。

 <?php
  echo '<div><input type="checkbox" value="' . $products_id .'" id="productsCompare" title="Compare" onclick="showProductsCompare()" /> Compare</div>';
 ?>

为解决这一点,我开始使用ajax方法并将结果放入$ _SESSION

我的脚本用于显示checbox值

$(function() {
    $('input[type=checkbox]').change(function() {
        var chkArray = [];
        $('#container').html('');

        //put the selected checkboxes values in chkArray[]
        $('input[type=checkbox]:checked').each(function() {
            chkArray.push($(this).val());
        });

        //If chkArray is not empty create the list via ajax
        if (chkArray.length !== 0) {
            $.ajax({
                method: 'POST',
                url: 'http://localhost/ext/ajax/products_compare/compare.php',
                data: { product_id: chkArray }
            });
        }
    });
});

最后通过此代码在另一页上发送信息。就像您看到的那样,在这种情况下没有表单。

<div class="col-md-12" id="compare" style="display:none;">
    <div class="separator"></div>
    <div class="alert alert-info text-md-center">
        <span class="text-md-center">
            <button class="btn"><a href="compare.php">Compare</a></button>
        </span>
    </div>
</div>

没问题,除了我的compare.php文件之外,其他所有东西都工作正常,我没有我的Ajax值。我在ajax文件中插入了session_start 但没有值插入到compare.php中。 我尝试了不同的方法,将session_start()放在compare.php内不起作用。

我唯一的解决方案是在我的产品文件中包含hidden_​​field,并在可能的情况下在整个数组中动态包含ajax的值。 在这种情况下,hidden_​​fields的值必须在数组下并由表单发送。

必须重写此脚本,以将chechbox值包含在数组下 不使用ajax。如何插入好的代码?

$(function() {
    $('input[type=checkbox]').change(function() {
        var chkArray = [];
        $('#container').html('');

        //put the selected checkboxes values in chkArray[]
        $('input[type=checkbox]:checked').each(function() {
            chkArray.push($(this).val());
        });

        //If chkArray is not empty show the <div> and create the list
        if (chkArray.length !== 0) {
            // Remove ajax
            // some code here I suppose to create an array with the checkbox value when it is on true
        }
    });
});

以及此代码和表单

<?php
    echo HTML::form('product_compare', $this->link(null, 'Compare&ProductsCompare'), 'post');

    // Add all the js values  inside an array dynamically

    echo HTML::hidddenField('product_compare', $value_of_javascript);
?>
<div class="col-md-12" id="compare" style="display:none;">
    <div class="separator"></div>
        <div class="alert alert-info text-md-center">
            <span class="text-md-center">
                <button class="btn"><a href="compare.php">Compare</a></button>
            </span>
        </div>
    </div>
</form>

注意:下面的此代码未包含在表单中(对此没有任何更改)。

 <?php
  echo '<div><input type="checkbox" value="' . $products_id .'" id="productsCompare" title="Compare" onclick="showProductsCompare()" /> Compare</div>';
 ?>

我的问题是: 如何将复选框的功能中的$value_of_javascript填充为true,以便在compare.php中正确发送信息

如果我的问题没有足够的信息,我将编辑此帖子并进行更新。

谢谢。

1 个答案:

答案 0 :(得分:0)

您无法将JavaScript对象传递到服务器进程。您需要将AJAX data作为字符串传递。您可以为此使用JavaScript JSON.stringify()方法。

$.ajax({
    method: 'POST',
    url : 'http://localhost/ext/ajax/products_compare/compare.php',
    data : JSON.stringify({product_id: chkArray})
});

一旦到达您的PHP流程,您就可以使用PHP JSON方法将其转换为对PHP友好的数据...

<?
    $myArray = json_decode($dataString, true);
    // ... etc ... //
?>

请参阅: