Вопрос по javascript, jquery, php – Как постоянно обновлять часть страницы

9

http://pastebin.com/dttyN3L6

Файл, который обрабатывает форму, называется 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>
Что с этим отступом пастбина? Можете ли вы разместить свой код здесь? elclanrs
ИсследоватьPeriodicalUpdater Плагин для JQuery. nickb
Только для тебя @elclanrs JakeParis

Ваш Ответ

3   ответа
11

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 );

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

Вместо использования for (индекс в массиве) вы должны использовать метод jQuery's $ .each (). Я склонен полагать, что если вы включите библиотеку, вы должны в полной мере использовать ее, а не смешивать и сопоставлять.
0

<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>
0

Для доступа к элементам с помощью 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;
});

Если вы хотите делать постоянные обновления, вы можете, конечно, добавить таймеры или какую-то другую логику. Но я надеюсь, что вы получите представление о том, как приступить к таким случаям;

Похожие вопросы