Вопрос по javascript, jquery, php – Как постоянно обновлять часть страницы
Файл, который обрабатывает форму, называется upload.php
Я никогда по-настоящему не использовал jquery / js, поэтому я не уверен, как бы я это сделал или куда бы я положил код.
Это как-то связано с этимsetInterval (loadLog, 2500);
Кроме того, как я могу сделать так, чтобы пользователь мог отправить форму без обновления страницы?
<code> $.ajax({ type: "POST", url: "upload.php", data: dataString, success: function() { } }); return false; ` </code>
а также
<code> <?php $conn1 = mysqli_connect('xxx') or die('Error connecting to MySQL server.'); $sql = "SELECT * from text ORDER BY id DESC LIMIT 1"; $result = mysqli_query($conn1, $sql) or die('Error querying database.'); while ($row = mysqli_fetch_array($result)) { echo '<p>' . $row['words'] . '</p>'; } mysqli_close($conn1); ?> </div> <?php if (!isset($_SESSION["user_id"])) { } else { require_once('form.php'); } ?> </code>
form.php:
<form action='profile.php' method='post' class='ajaxform'>
<input type='text' name='txt' value='Test Text'>
<input type='submit' value='submit'>
</form>
<div id='result'>Result comes here..</div>
profile.php:
<?php
// All form data is in $_POST
// Now perform actions on form data here and
// create an result array something like this
$arr = array( 'result' => 'This is my result' );
echo json_encode( $arr );
?>
jQuery:
jQuery(document).ready(function(){
jQuery('.ajaxform').submit( function() {
$.ajax({
url : $(this).attr('action'),
type : $(this).attr('method'),
dataType: 'json',
data : $(this).serialize(),
success : function( data ) {
// loop to set the result(value)
// in required div(key)
for(var id in data) {
jQuery('#' + id).html( data[id] );
}
}
});
return false;
});
});
And If you want to call an ajax request without refreshing page after a particular time, you can try something like this:
var timer, delay = 300000;
timer = setInterval(function(){
$.ajax({
type : 'POST',
url : 'profile.php',
dataType: 'json',
data : $('.ajaxform').serialize(),
success : function(data){
for(var id in data) {
jQuery('#' + id).html( data[id] );
}
}
});
}, delay);
И вы можете остановить таймер в любое время, как это:
clearInterval( timer );
Надеюсь, что это даст вам направление для выполнения вашей задачи.
<html><head></head><body>
<div id="feed"></div>
<script type="text/javascript">
var refreshtime=10;
function tc()
{
asyncAjax("GET","upload.php",Math.random(),display,{});
setTimeout(tc,refreshtime);
}
function display(xhr,cdat)
{
if(xhr.readyState==4 && xhr.status==200)
{
document.getElementById("feed").innerHTML=xhr.responseText;
}
}
function asyncAjax(method,url,qs,callback,callbackData)
{
var xmlhttp=new XMLHttpRequest();
//xmlhttp.cdat=callbackData;
if(method=="GET")
{
url+="?"+qs;
}
var cb=callback;
callback=function()
{
var xhr=xmlhttp;
//xhr.cdat=callbackData;
var cdat2=callbackData;
cb(xhr,cdat2);
return;
}
xmlhttp.open(method,url,true);
xmlhttp.onreadystatechange=callback;
if(method=="POST"){
xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
xmlhttp.send(qs);
}
else
{
xmlhttp.send(null);
}
}
tc();
</script>
</body></html>
Для доступа к элементам с помощью Jquery вы используете селекторы css, например, чтобы получить значение поля ввода с именем & quot; foo & quot; вы делаете следующее:
var fooVal = $("input[name=foo]").val();
Чтобы отправить его на сервер, необходимо добавить прослушиватель событий (например, щелкнуть) к кнопке отправки / любому другому элементу.
var data = { varName : fooVal };
var url = "http://example.com";
var responseDataType = "json";
function parseResponse(JSON)
{
// your code handling server response here, it's called asynchronously, so you might want to add some indicator for the user, that your request is being processed
}
$("input[type=submit]").on('click', function(e){
e.preventDefault();
$(this).val("query processing");
$.post(url,data, parseResponse, responseDataType);
return false;
});
Если вы хотите делать постоянные обновления, вы можете, конечно, добавить таймеры или какую-то другую логику. Но я надеюсь, что вы получите представление о том, как приступить к таким случаям;