Возврат данных SQL в JavaScript после вызова jQuery ajax

#php #javascript #jquery #ajax

#php #javascript #jquery #ajax

Вопрос:

Я довольно новичок в ajax (через jQuery) и JavaScript. Чего я хотел бы, так это периодически (и асинхронно) выполнять php-скрипт, который извлекает некоторые данные SQL. Однако я представлю эти данные в виде графика JavaScript, поэтому они нужны мне для возврата в мой JavaScript.

Я попробовал встроенный php-скрипт внутри JavaScript, который помещает данные SQL в массив, а затем просто извлекает саму страницу с помощью .ajax вызова, но это не сработало (хотя я мог видеть в исходном коде страницы, что JavaScript был изменен, график не реагировал на изменения):

ajax.php (не работает):

 $(function () {        
   function fetchData() {            
   $.ajax('ajax.php');
   <?php        
   try
   {
      $now = time();
      $query = "select * from jet_pressure;"        
      $result = $db->query($query);
      foreach ($result as $row)
      {                                      
         print "d1.push([".$row['timestamp'].",".$row['unknown']."]);";            
      }                                
   }
   catch (Exception $e)
   {
      print 'Exception : '.$e->getMessage();
   }
   ?>           
   $.plot($("#placeholder"), [ d1]);
   setTimeout(fetchData, 5000);
   }    
    setTimeout(fetchData, 500);    
   });       
  

Какой рекомендуемый способ сделать это?

Комментарии:

1. не ясно, что именно вы делаете, если вы хотите обновить содержимое заполнителя с помощью ajax, тогда эта строка должна быть в методе success: вашего вызова ajax. я рекомендую вам немного почитать документы ajax по jquery.com

2. Вы смешиваете php на стороне сервера со скриптом на стороне клиента. The ajax.php вот что можно запустить — php в середине вашего скрипта выполняется только перед первой загрузкой страницы

Ответ №1:

Я думаю, вы путаете свои концепции. PHP запускается только на веб-сервере. Javascript запускается на клиенте (т.е. в веб-браузере)

Если вы создадите страницу с .php расширением, таким же, как у вас ajax.php , она будет обслуживаться с вашего веб-сервера один раз, и все, что содержится в <?php ?> блоке, будет проанализировано сервером — оно не динамическое.

Результирующая страница содержит проанализированные значения из вашего php-скрипта, но не сам скрипт.

Javascript работает на компьютере пользователя и, следовательно, обрабатывает взаимодействие с пользователем и события на веб-странице. Вы можете использовать Javascript для вызова серверного скрипта (в данном случае php), когда вам нужно получить данные с сервера. В этом, по сути, и заключается суть AJAX. Но обычно javascript содержится в файлах, заканчивающихся .js , которые, как правило, не анализируются вашим веб-сервером, если только javascript на самом деле не включен в вашу страницу, но в наши дни это не совсем так.

Я понятия не имею, что вы пытаетесь сделать, смешивая javascript с php. Это не AJAX.

Я предлагаю вам использовать что-то вроде JSON. Сначала этот грубый php-скрипт для компиляции ваших результатов в JSON, затем вызов javascript ajax. Вам необходимо включить библиотеку JQUERY и сохранить весь php-скрипт в виде отдельного файла с именем getdata.php .

 <?php
// You'll have to do all the database select stuff here


    while ($Row = mysql_fetch_array($params)) 
{      
    $jsondata[]= array('jsobjectfield1'=>$Row["dbtablefield1"],
        'jsobjectfield2'=>$Row["dbtablefield2"],                       'jsobjectfield3'=>$Row["dbtablefield3"],                      'jsobjectfield4'=>$Row["dbtablefield4"]); 
};  
echo("{"TableData": ".json_encode($jsondata)."};");

?>
  

Javascript:

 $.ajax({
    url: 'getdata.php',
    type: "POST",
    data: entereddata,
    dataType: "json",
    timeout: (7000),
    //wait 7 seconds          
    error: function(data)          
    {                     

    }, //end of ERROR handling          
    success: function(data)          
    {  
        // you'll find the data returned here:
    data.jsobjectfield1   
    }; // end of SUCCESS handling 

}); // end AJAXcall 
  

Комментарии:

1. Спасибо, это работает. Но я думаю, что то, что я сделал, должно генерировать нечто подобное, поскольку я асинхронно обновляю саму страницу (ajax.php ) и, следовательно, сервер должен повторно создать страницу php, тем самым заполнив ее новыми данными. Это также то, что я видел при просмотре исходного кода страницы. Ну, однако, не сработало, так что теперь это не имеет значения.

Ответ №2:

ПРИВЕТ, я не думаю, что вы можете сделать это напрямую…. Если вы хотите передавать данные туда и обратно между PHP и JS, вам нужно использовать http-запрос xml.. вы могли бы найти здесь очень хороший учебник, который вам очень поможет …… http://www.tizag.com/ajaxTutorial/ajaxxmlhttprequest.php надеюсь, это поможет… это определенно помогло мне, когда я начинал…. Я пытался сделать то же самое, что вы пытаетесь сделать, и тогда я понял, что пытаюсь перепутать сценарии на стороне сервера и клиента

здесь вы делаете следующее….

1 передайте список параметров в php

2 php выполняет некоторую обработку (в вашем случае запрос к базе данных) и отображает желаемые выходные переменные

3, которые возвращаются в JS

Если вы ищете прямой код… вот так …. заслуга сайта, о котором я упоминал выше, — это не мой код… Я действительно рекомендую вам перейти на этот сайт… вы многому научитесь за короткое время …. надеюсь, это поможет

 <html>
<body>

<script language="javascript" type="text/javascript">
<!-- 
//Browser Support Code
function ajaxFunction(){
    var ajaxRequest;  // The variable that makes Ajax possible!

    try{
        // Opera 8.0 , Firefox, Safari
        ajaxRequest = new XMLHttpRequest();
    } catch (e){
        // Internet Explorer Browsers
        try{
            ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try{
                ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e){
                // Something went wrong
                alert("Your browser broke!");
                return false;
            }
        }
    }
    // Create a function that will receive data sent from the server
    ajaxRequest.onreadystatechange = function(){
        if(ajaxRequest.readyState == 4){
            document.myForm.time.value = ajaxRequest.responseText;
        }
    }
    ajaxRequest.open("GET", "serverTime.php", true);
    ajaxRequest.send(null); 
}

//-->
</script>



<form name='myForm'>
Name: <input type='text' onChange="ajaxFunction();" name='username' /> <br />
Time: <input type='text' name='time' />
</form>
</body>
</html>
  

serverTime.php

 <?php
echo date("H:i:s"); 
?>
  

Комментарии:

1. Я согласен. Я забыл об этом сайте, методы объяснены очень хорошо, хотя сейчас, конечно, такие вещи, как jQuery, облегчают жизнь — но только если вы понимаете базовые концепции, описанные на этом сайте.