Попытка передать переменную из входного радио в PHP через jQuery.post () - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь загрузить HTML-таблицу, созданную с помощью PHP-кода.Таблица должна быть сгенерирована SQL-запросом, который зависит от переменной из селектора радиовхода, но почему-то я не могу передать эту переменную через jQuery.post ().Я сделал простую версию, которая имеет ту же проблему, поэтому я надеюсь, что кто-то может помочь мне с этим:

test.php:

<html>
<head>
    <script type="text/javascript"  src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
</head>
<script type="text/javascript">
    $(document).ready(function(){

        $("input[name$='selectOP']").on("change", function() {
            var op = $(this).val();
            $.post('ajax.php', {varphp: op});   
            $("#div1").load('ajax.php', function(){             
            });
        });

    });
</script>
<body>
    <label class="radio-inline"><input type="radio" value="110" name="selectOP" id="selectOP">110  </label>
    <label class="radio-inline"><input type="radio" value="115" name="selectOP" id="selectOP">115  </label>
    <div id="div1">
    </div>
</body>
</html>

ajax.php:

<?php
    $var= "Something";
    echo $var;
    //$varphp = $_POST['varphp'];
    //echo $varphp;
?>

Итак, с двумя последними строчками комментария ajax.php код успешно запускается, и переменная $ var загружается в div1.Но если я раскомментирую эти строки, то, очевидно, код останавливается, и на div1 ничего не загружается.Что я делаю не так?

Ответы [ 3 ]

0 голосов
/ 18 октября 2018

Вы вызываете $ .post, где передаете аргумент, а затем вызываете load без аргументов.Конечно, вы не можете получить $ _POST ['varphp'] при вызове load, потому что вы не передаете эту переменную.

, вы должны использовать одну из них.Вы можете сделать это:

$.post('ajax.php', {varphp: op}, function(data){ $("#div1").html(data); }, 'html' ); 

или

$("#div1").load('ajax.php', {varphp: op});

, но не оба

, таким образом, ваш код может быть

$ (документ).ready (function () {

    $("input[name$='selectOP']").on("change", function() {
        var op = $(this).val();
        $.post('ajax.php', {varphp: op}, function(data){ $("#div1").html(data); }, 'html' ); 
    });

});

или

$ (документ) .ready (function () {

    $("input[name$='selectOP']").on("change", function() {
        var op = $(this).val();
        $("#div1").load('ajax.php', {varphp: op}); 
    });

});
0 голосов
/ 18 октября 2018

Хорошая практика, которая мне нравится, - это использовать AJAX с отложенными обещаниями.Вы можете попробовать преобразовать ваш код в следующее:

$.ajax({
  type: 'post', // you can switch to GET, POST, etc.
  url: 'ajax.php',
  data: {varphp: op},
})
.done(function(data) {
  $('#div1').html(data);
})
.fail(function(data) {
  // if your code fails, you can see the errors here in the console
  console.log(data);
})
.always(function(data) {
  // do something every time
});

Коды в функциях обратного вызова done, fail или always будут выполняться в зависимости от того, успешен ли вызов AJAX, произошел сбойили ни соответственно.Благодаря этому вы также можете легко устранять неполадки в вашем коде, особенно когда произошла ошибка вызова AJAX (загляните внутрь функции fail).

0 голосов
/ 18 октября 2018
$.post('ajax.php', {varphp: op});   
$("#div1").load('ajax.php', function(){             
$});

Эти две строки фактически выполняют два отдельных запроса AJAX, что означает, что сервер будет обрабатывать их отдельно.Только первый имеет параметр POST, и только второй устанавливает содержимое объекта DOM.

Попробуйте что-то вроде этого:

$("#div1").load('ajax.php', {
  varphp: op
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...