Загрузите функцию php по нажатию на div (или лучшее решение)

0

Хорошо, ребята/Галс. Мне нужна помощь. Или лучший способ сделать это. Мне нужно сделать это, когда кто-то щелкнет 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?
                }
            });
    });
});
});
  • 0
    Вы можете использовать jquery для этого
  • 0
    Я уверен, что я могу использовать jquery для этого .. Но как ... Что. Я искал везде, как загрузить функцию php, но все они хотят, чтобы она перезагрузила страницу. Мне нужно, чтобы НЕ перезагрузить страницу.
Показать ещё 4 комментария
Теги:
function

2 ответа

1
Лучший ответ

Вам нужно действие 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?
                }
       });
     }
   });
});

Все непроверенные, но, надеюсь, вы получите эту идею.

  • 0
    Адам, я попробовал этот пример и немного поиграл с ним, но что-то не так с опцией click? Раздел Div был немного отключен, но я исправил это довольно быстро ... Но мой Jquery ОЧЕНЬ ограничен, и хотя я понимаю, что он делает ... Я не мог сказать вам, была ли синтаксическая ошибка. Я добавил документ. Как насчет идентификатора: $ (this) .data ('id'), должны ли это быть data ['Id'] и 'Name' или это id: нужно указать Id :?
  • 0
    Не обращая внимания после еще одного исследования, я вижу, что означает идентификатор и такие. Но я все еще не могу заставить это работать.
Показать ещё 5 комментариев
0

Вот исходный код, относящийся к приведенной ниже информации, за исключением того, что я еще не реализовал какие-либо материалы 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>

Затем просто следуйте этой ссылке для нокаута

Таким образом, мы оставляем скрипты на стороне сервера, чтобы сделать материал на стороне сервера, и скрипты на стороне клиента для обработки просмотра. Гораздо чище и проще поддерживать серверную сторону.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню