Динамически отправить значение JavaScript через форму - PullRequest
0 голосов
/ 13 апреля 2019

Я не знаю, возможно ли это, но мне нужно отправить некоторую информацию через форму, находящуюся внутри URL, исходя из значения флажка.

Этот код ниже находится внутри цикла продуктов и создает флажок для каждогопродукты (сравнение товаров).

В моем случае невозможно сделать этот код ниже по форме.

 <?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.Я вставил session_start в AJAX-файл, но не добавляется значение в 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 голосов
/ 13 апреля 2019

Нельзя передавать объекты 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 данные с помощью методов PHP JSON ...

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

См .:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...