Как обновить строку PHP с помощью POST Ajax без обновления страницы? - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь изменить число в строке $user_foreach_limit с 1 на 2 и с 2 на 3 ... (при каждом нажатии кнопки +1 еще).Эта строка является foreach.

Текущий код: Ajax работает, но я должен обновить свою страницу, чтобы увидеть изменения.Как я могу сделать это без обновления страницы?Есть ли другой способ заставить его работать без добавления всего foreach к form-show-more.php?

HTML

<form method='POST' id='form_show_more'>
  <input type='submit' value='Show more'/>
</form>
<?php
$user_foreach_limit = 1;
foreach ($modules_for_from as $m_foreach_as) if ($tmp++ < $user_foreach_limit) {
  // foreach content
}
?>

AJAX

$('#form_show_more').submit(function(event){
  event.preventDefault();
  $.ajax({
    url: 'form-show-more.php',
    type: 'POST',
    data: $('#form_show_more').serialize(),
    dataType: 'json'
  });
});

form-show-more.php

$user_foreach_limit = 2;

1 Ответ

0 голосов
/ 27 августа 2018

Это довольно просто, вы можете сделать HTML прямо там, где находится ваш первоначальный цикл, вам нужна оболочка.jQuery позволяет вам просто вставить html напрямую, если это необходимо.

Создайте его как функцию view для повторного использования там, где вам нужно.Функция не будет работать как есть, вам нужно будет ввести $tmp или все, что вам нужно, но концепция требует этого как функции.

/ functions / myfunction.php

<?php
function myfunction($user_foreach_limit = 1)
{
    # I would check if the value is a number first
    if(!is_numeric($user_foreach_limit))
        $user_foreach_limit = 1;
    # Do your loop stuffs
    foreach ($modules_for_from as $m_foreach_as) {
        if ($tmp++ < $user_foreach_limit) {
        // foreach content
        }
    }
}

Добавьте пару скрытых полей только для того, чтобы сделать несколько маркеров идентификации запроса.

/ original-page.php

<form method='POST' id='form_show_more' action="form_show_more.php">
    <input type="hidden" name="action" value="get_more_mods" />
    <input type="hidden" name="increment" value="2" />
    <input type='submit' value='Show more'/>
</form>
<!-- create a wrapper so you can use it to drop the updated html into -->
<div id="table-list">
<?php
# Add the view function
include_once(__DIR__.'/functions/myfunction.php');
# Run the function right on load for incremental 1, ajax will replace this content
myfunction(1);
?>
</div>

<script>
$('#form_show_more').on('submit', function(event){
    event.preventDefault();
    $.ajax({
        // You can get the destination from the form
        url: $('#form_show_more').attr("action"),
        type: 'POST',
        data: $('#form_show_more').serialize(),
        success: function(response) {
            $('#table-list').html(response);
        }
    });
});
</script>

Ничего не предпринимать, если отправляется неверный запрос.

/ form_show_more.php

<?php
# Stop if action not sent
if(empty($_POST['action']))
    die("Invalid request.");
# Stop if the action is not correct
elseif($_POST['action'] != 'form_show_more')
    die("Invalid action.");
# Add the view function
include_once(__DIR__.'/functions/myfunction.php');
myfunction($_POST['increment']);
exit;
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...