Как отобразить сообщение PHP после загрузки jQuery? - PullRequest
0 голосов
/ 26 марта 2012

Я новичок в PHP. Я хотел построить небольшой проект бронирования номеров и улучшить его с помощью AJAX.

http://img851.imageshack.us/img851/6172/88303815.png

Я пытаюсь отображать предупреждающее сообщение каждый раз, когда кто-то достигает лимита двух часов времени в комнате. Раздел регистрации - это место, где весь PHP заботится о действии «Get Room». Моя проблема в том, что функция room_per_user не показывает правильное количество комнат на пользователя , если я не обновлю страницу.

Как я могу исправить свой код, чтобы отобразить сообщение об ошибке?

     $("#formReg").ajaxForm({
       url: "room.php",
       type: "POST",
       beforeSubmit: disableButtons,
       success: function(data) {

          $("#registration").load("room.php #registration", function() { 
                $(function() {

          <?php 
          if(rooms_per_user($_SESSION['user_id'])>=2)
          {
            $string = "\$(\"#dialog-message\").find('.error').show();";
            echo $string;
          } 
          ?>

                    $( "input:submit, a, button", ".registration" ).button();
                    $( "a", ".registration" ).click(function() { return false; });
                });                 
          });


         $("#cancellation").load("room.php #cancellation", function() {     
            $(function() {
                 $( "input:submit, a, button", ".cancellation" ).button();
                $( "a", ".cancellation" ).click(function() { return false; });
              });                     
          });

        }); 

          function disableButtons(){
           $('form').find('input[type="submit"]').attr('disabled', 'disabled');
          }

Большое спасибо, и прости, если я сделал несколько роковых ошибок; -)

Извините, я неправильно скопировал код в части PHP (я попытался сократить его и забыл тег PHP)

РЕДАКТИРОВАТЬ 2: Я пытался использовать кодирование JSON, но я не знаю, почему он не работает для меня ... Он застрял на этапе отключения кнопки отправки. Когда я удаляю строку типа данных, она работает нормально ... Помогите кому-нибудь? Большое спасибо за ваши ответы!

    $("#formReg").ajaxForm({
        url: "room.php",
        dataType: 'json',
        type: "POST",
        beforeSubmit: function() {
            $('form').find('input[type="submit"]').attr('disabled', 'disabled');
        },
        success: function(data) {

            alert(data.status);

            $("#registration").load("room.php #registration", function() { 
                $( "input:submit, a, button", ".registration" ).button();
                $( "a", ".registration" ).click(function() { return false; });
            });


            $("#cancellation").load("room.php #cancellation", function() {     
                $( "input:submit, a, button", ".cancellation" ).button();
                $( "a", ".cancellation" ).click(function() { return false; });
            }); 

           }

      });

Ответы [ 2 ]

1 голос
/ 27 марта 2012

Дэвид как-то прав в своем ответе, но я хотел бы остановиться на нем немного подробнее.

Здесь у вас есть функция javascript с выводом переменной в зависимости от текущего количества комнат, которые есть у пользователя.

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

<?php 
if(rooms_per_user($_SESSION['user_id'])>=2)
{
$string = "\$(\"#dialog-message\").find('.error').show();";
echo $string;
} 
?>

блок вашего кода не будет выводиться на страницу. Вот почему ваши пользователи не видят предупреждающее сообщение при попытке добавить дополнительные комнаты. Код, который вы выводите на страницу, НЕ перезагружается при каждом ajax-запросе, а является статическим содержимым. Так как пользователи регистрируют дополнительные комнаты помимо 2, код JS здесь:

$("#dialog-message").find('.error').show();

никогда не выводится и не используется.

Как правило, когда вы делаете проверку, подобную этой, «правильный» способ сделать это на стороне сервера. Поэтому, когда пользователь пытается зарегистрировать комнату, но уже забронировал 2 из них, AJAX-запрос отправляется в room.php, который получает ответ «data» от сервера. Я бы предложил добавить dataType к параметрам ajaxForm, например так:

   url: "room.php",
   type: "POST",
   beforeSubmit: disableButtons,
   dataType: 'json',
   success: function(data) {

Это скажет jQuery ожидать ответа от сервера в виде JSON. В вашем скрипте rooms.php вам нужно будет установить стандартный формат данных для ответа и вернуть его с помощью

echo json_encode( array( 'status' => 'OK' ) ); //tell the JS code that the status was OK

или в случае ошибки: echo json_encode (array ('status' => 'ERROR', 'errtxt' => 'Извините, но вы уже зарезервировали 2 комнаты.')); // сообщаем коду JS, что статус был в порядке

Итак, я выкинул ваш код JS и удалил множество jQuery-оболочек вокруг функций внутри функций, которые вам не нужны, и вот конечный результат:

$("#formReg").ajaxForm({
    url: "room.php",
    type: "POST",
    beforeSubmit: function() {
        $('form').find('input[type="submit"]').attr('disabled', 'disabled');
    },
    success: function(data) {

        if( data.status != 'OK' ) {
            $("#dialog-message").find('.error').html(data.errtxt).show();
            return;
        }

        $("#registration").load("room.php #registration", function() { 

            $( "input:submit, a, button", ".registration" ).button();
            $( "a", ".registration" ).click( function(e) {
                e.preventDefault();
            });

        });

        $("#cancellation").load("room.php #cancellation", function() {     
            $( "input:submit, a, button", ".cancellation" ).button();
            $( "a", ".cancellation" ).click(function() { return false; });
        }); 
    }
});

Соедините это с остальными предложениями для стороны PHP, и я думаю, что вы будете очень милы.

0 голосов
/ 26 марта 2012

Вы, похоже, смешиваете JavaScript с PHP:

if(rooms_per_user($_SESSION['user_id'])>=2)

Является ли rooms_per_user функцией PHP или функцией JavaScript?$_SESSION это определенно массив PHP.Все, что в PHP, будет бессмысленным для JaveScript, и наоборот.Скорее всего, этот код вызывает ошибки в консоли браузера JavaScript.

PHP выполняется на стороне сервера.По завершении выполнения страница отправляется в браузер.Затем JavaScript выполняется в браузере.Код PHP и код JavaScript существуют в двух полностью различных контекстах и ​​не могут быть смешаны следующим образом.

Учитывая структуру, которая у вас есть в вашем коде JavaScript прямо сейчас, самый простой способЧтобы достичь желаемой функциональности, возможно, нужно было бы добавить еще один вызов к .ajax() для вызова ресурса на стороне сервера, получить значение rooms_per_user, установить его в переменную JavaScript и затем использовать его (все в success изэто .ajax() вызов).

По сути, ваш код JavaScript не может напрямую взаимодействовать с вашим кодом PHP.Если есть значение, которое существует только на сервере, вам нужно позвонить на этот сервер, чтобы получить это значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...