javascript — передать переменную размера таблицы из js в переполнение стека

У меня есть страница на PHP с:

$sizelimit = "6";
include ('table.php');

Он отлично работает, отображая последние 6 записей MySQL моей таблицы, сгенерированных php, на моей главной странице (кратко) и 20 или последние записи, если пользователь имеет прямой доступ к table.php.
Теперь я реализую AJAX для загрузки этой же таблицы каждый раз, когда у нее есть новая запись, но как мне сделать, чтобы передать эту переменную $sizelimit из ajax в php, так что на моей главной странице этот table.php будет иметь только 6 записей, но если к table.php обращаются в одиночку, он имеет последние 20 записей?
мой код сейчас:

 $sizelimit = "6";
// include ('table3.php');
echo'    <div id="results">Loading data ...</div>';

table.php это:

<?php
require_once '../db/dbconfig.php';
// Create connection.
if ($sizelimit <> "" and $sizelimit > 0) {
$limit = $sizelimit;
} else {
$limit = "20";
}

$conn = mysqli_connect($servername, $username, $password, $dbname);
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
// Get the most recent 25 entries.
$result = mysqli_query($conn, "SELECT Time, T1, T2, Height FROM temp ORDER BY Time DESC, Time DESC  LIMIT ".$limit);
?>
<table class="table striped  bordered hoverable white">
<tr><th>Time</th><th>Water Temp</th><th>Air Temp</th><th>Tank level</th></tr>
<?php
while($row = mysqli_fetch_assoc($result)) {
echo "<tr><td>";
echo $row["Time"];
echo "</td><td>";
echo $row["T1"];
echo "&deg;C</td><td>";
echo $row["T2"];
echo "&deg;C</td><td>";
echo $row["Height"];
echo "mm</td></tr>";
}
echo "</tr></table>";

// Close connection.
mysqli_close($conn);
?>

большое спасибо

0

Решение

При вызове ajax используйте это так:

.ajax({
url: 'table.php',
type: 'POST',
data: { limit: "5"} ,
contentType: 'application/json; charset=utf-8',
success: function (response) {
//success
},
error: function () {
//error
}
});

И в вашем php файле:

require_once '../db/dbconfig.php';
// Create connection.
if(isset($_POST["limit"])){
$sizelimit = $_POST["limit"];
}
if ($sizelimit <> "" and $sizelimit > 0) {
$limit = $sizelimit;
} else {
$limit = "20";
}

Если вы отправите 20 в javascript, вы получите 20, если вы отправите 6 в javascript, вы получите 6. Надеюсь, это решит вашу проблему.

0

Другие решения

Реализация ajax означает, что вы сделаете запрос с теми параметрами, которые хотите отправить, затем прослушаете ответ (который вернет таблицу — с последними 6 записями) и чем-то создадите этот ответ — предпочтительно его обработать.

Таким образом, вы можете отправить параметр $ size в вашем запросе ajax и сохранить ту же логику.

Лучше всего обнаружить запрос ajax, закодировать данные таблицы в формате JSON и выполнить рендеринг по размеру клиента. Для этого вы можете просто сделать запрос ajax как POST, а на стороне сервера обрабатывать GET и POST с различными ответами.

Пример AJAX —
Это пример клиентской логики, использующей простой JavaScript без каких-либо других платформ:

var getMyTable = function(url, data) {
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
if (xmlhttp.status == 200) {
data = JSON.parse(xmlhttp.responseText);
console.log('Post ajax call was a success')
// SUCCESS - get ready to render the response.
// call function responsible for data render
// - in your case you can render all html response directly:
displayTable(xmlhttp.responseText);
} else if (xmlhttp.status == 400) {
console.log('There was an error 400 for POST')
} else {
console.log('something else other than 200 was returned for POST! The status is ' + xmlhttp.status)
}
}
}

xmlhttp.open("POST", url, true);
//...
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(data);
};

function displayTable(htmlData) {
// get the table element and update the data to display
document.getElementById("#table-response").innerHTML = htmlData;
}

//This is a direct call - you can place it somewhere else.
getMyTable("/table.php", "limit=8");

На стороне сервера определите, получили ли вы данные на POST, и обновите логику …

$ajaxRequest = false;
if(isset($_POST["limit"])){
$ajaxRequest = true;
$sizelimit = $_POST["limit"];
}

if ($ajaxRequest) {
// ... can do additional operations if needed.
}

// continue with your connection and $sizelimit check
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector