Хорошо, ребята/Галс. Мне нужна помощь. Или лучший способ сделать это. Мне нужно сделать это, когда кто-то щелкнет div id O+ $ row ['Id'] будет загружать отображение функций и некоторые из них передают аргументы. Я могу обрабатывать $ row ['name'], который не передается, и $ pastOp всегда будет = TRUE в этом случае. И мне нужно сделать это, не перезагружая страницу, если это вообще возможно.
Причина, по которой я нуждаюсь в этом, заключается в том, что при запуске для ВСЕХ из них в то же время требуется почти 5-10 минут для полной загрузки, и нет необходимости загружать их все. Только те, на которые люди должны нажимать, когда они идут. Любая помощь действительно ценится.
while($row = $result->fetch_assoc()){
echo "<div style=\"clear: both;\"></div>\n";
echo "<div class=\"operation\">\n";
echo "<h2 class=\"opsList\" style=\"cursor:pointer;\"><img src=\"/js/assets/".$row['icon']."\"/><div id=\"O".$row['Id']."\">Past Operations for " .$row['Name'] ."</div></h2>\n";
echo "<div class=\"initiallyHidden\" id=\"P".$row['Id']."\">";
// displayops($row['Id'], $row['Name'], $pastOp);
echo "</div>";
echo "</div>\n";
}
Используя модифицированную версию кода Adams и некоторые исследования онлайн, я получил его на работу. (СПАСИБО АДАМ !!!) Ниже приведен модифицированный JQuery
Хорошо, я смог взять некоторые из кода Adams и заставить его работать. Большое спасибо Адаму. Ниже приведена работа.
$(document).ready(function(){
$(function(){
$('.operation').click(function(){
var container = $(this);
var params = {
id: $(this).data('id'),
name: $(this).data('name')
};
$
$.ajax({
url: '/opserv/ajaxExPrintOps.php',
data: params,
type: 'POST',
dataType: 'html',
success: function(data){
$('.initiallyHidden', container).html(data);
},
error: function(){
alert('An error occurred'); //Or something mroe useful?
}
});
});
});
});
Вам нужно действие ajax, которое принимает идентификатор строки (возможное имя и т.д.) В качестве параметров и возвращает содержимое только для этой строки. Т.е., который запускает вашу команду displayops.
Затем вы используете в качестве основного php:
while($row = $result->fetch_assoc()){
echo "<div style='clear: both;'></div>\n";
printf( '<div class="operation" data-id="%2$s" data-name="%3$s">
<h2 class="opsList" style="cursor:pointer;">
<img src="/js/assets/%1$s"/>
<div id="O%2$s">Past Operations for %3$s</div>
</h2>
<div class="initiallyHidden" id="P%2$s"></div>
</div>',
$row['icon'],
$row['Id'],
$row['Name'] );
echo "</div>\n";
}
Затем добавьте действие, например, /get_past_ops.php:
<?php
// You should maybe add some data validation here?
displayops($_POST['id'], $_POST['name'], TRUE);
Затем на вашей странице добавьте следующий javascript:
$(function(){
$('.operation').click(function(){
var container = $(this);
if( !$('.initiallyHidden', container).is(':visible') ){
var params = {
id: $(this).data('id'),
name: $(this).data('name')
};
$.ajax({
url: '/get_past-ops.php',
data: params
type: 'POST',
dataType: 'html',
success: function(data){
$('.initiallyHidden', container).html(data).show();
},
error: function(){
alert('An error occurred'); //Or something mroe useful?
}
});
}
});
});
Все непроверенные, но, надеюсь, вы получите эту идею.
Вот исходный код, относящийся к приведенной ниже информации, за исключением того, что я еще не реализовал какие-либо материалы JSON
, но я буду :)
Вот как я получаю некоторые данные PHP из базы данных и сохраняю их в читаемых формах, тогда их легко передать JSON в представление. Где нокаут может взять остальную часть:
public function getAll() {
try {
$stmt = $this->database->queryUnprepared('SELECT * FROM products');
$_products = $stmt->fetchAll(PDO::FETCH_CLASS, "Product");
$stmt->closeCursor();
$this->error = FALSE;
return $_products;
}catch (PDOException $e){
$this->error = TRUE;
$this->message = $e->getMessage();
}
}
$this->database
- это просто переменная класса, queryUnprepared
класс обертки PDO, все queryUnprepared
, $pdoConnection->query()
- это $pdoConnection->query()
. PDO - это лучший доступный класс php базы данных. Тот факт, что вы можете подключиться к любому серверу базы данных, используя его. Плюс я думаю, что у него есть лучшие функции для использования, чем mysqli
. Например, тот факт, что вы можете вытащить все строки из базы данных и иметь PDO, автоматически заполняет модель, идеально.
class Product {
public $id;
// etc model data
}
это класс продукта.
Это даст вам длинный массив всех продуктов в их соответствующих моделях. После этого просто оберните его простым json_encode()
или, еще лучше, расширьте функциональность класса Product
:
class Product {
public $id;
// etc model data
public function toJson() {
return json_encode(array('id' => $this->id)); // etc for all things
}
}
Для вашего списка OPS выполните:
class OpsModel {
public $Id;
public $name;
public $icon;
// etc extend etc
}
Я бы предположил, что добрался до состояния JSON
, просто сделайте что-то вроде:
foreach($_products as $product) {
array_push($jsonArray, $product->toJson());
}
$productJsonArray = json_encode($jsonArray);
Тогда это простой случай присвоения ему переменной javascript:
<script> var jsonArray = <?php echo $productJsonArray;?> </script>
Затем просто следуйте этой ссылке для нокаута
Таким образом, мы оставляем скрипты на стороне сервера, чтобы сделать материал на стороне сервера, и скрипты на стороне клиента для обработки просмотра. Гораздо чище и проще поддерживать серверную сторону.