#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, облегчают жизнь — но только если вы понимаете базовые концепции, описанные на этом сайте.