За последние 24 часа нас посетили 17186 программистов и 1651 робот. Сейчас ищут 1139 программистов ...

Взаимодействие jQuery и php - прошу помощи у народа!

Тема в разделе "JavaScript и AJAX", создана пользователем mark2010, 23 дек 2010.

  1. mark2010

    mark2010 Активный пользователь

    С нами с:
    18 авг 2010
    Сообщения:
    80
    Симпатии:
    0
    Доброе утро!

    Я раньше работал с Mootools, там эта ситуация реализуется вообще без проблем. Но сайт на jQuery, поэтому вопрос самый элементарный. :)

    Итак, имеем форму:
    Код (Text):
    1.  
    2. <form name="pageEdit" id="pageEdit">
    3.     <table width="100%">
    4.         <tr>
    5.             <td>Заголовок:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <input name="pageTitle" size=55 value="{$PAGE_TITLE}"></td>
    6.         </tr>
    7. <tr>
    8.             <td>
    9.                 <input type="button" class="btn" value="Отправить данные">
    10.             </td>
    11.         </tr>
    Имеем также отрывок кода jQuery:
    Код (Text):
    1.  
    2. $(document).ready(function() {
    3.    $('.btn').bind('click', function() {
    4.        $.ajax({
    5.             url: 'http://localhost/cms/admin/editPage.php',
    6.             dataType: 'json',
    7.             data: $('#pageEdit').serialize(),
    8.             cache: false,
    9.             success: function (data)
    10.             {
    11.                 alert(data);
    12.             }
    13.        });
    14.     });  
    15. });
    И, наконец, имеем php-скрипт:
    Код (Text):
    1.  
    2. <?php
    3.  
    4. require $_SERVER['DOCUMENT_ROOT'] . '/cms/config/config.php';
    5.  
    6. //получим данные
    7. $page_number    =   $_POST['pageNumber'];
    8. $page_title     =   $_POST['pageTitle'];
    9. $page_keywords  =   $_POST['page_keywords'];
    10. $page_descr     =   $_POST['page_description'];
    11. $page_content   =   $_POST['page_content'];
    12.  
    13. echo json_encode($page_title);
    14. ?>
    В результате выполнения сего счастья получаю null. Если действовать без json, получаю просто пустой алерт.

    Вопрос: как получить данные от сервера и как их принять? Что я делаю не так?
     
  2. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    PHP:
    1. <?php
    2. require $_SERVER['DOCUMENT_ROOT'] . '/cms/config/config.php';
    3.  
    4. //получим данные
    5. $page_number   =   $_POST['pageNumber'];
    6. $page_title      =   $_POST['pageTitle'];
    7. $page_keywords   =   $_POST['page_keywords'];
    8. $page_descr      =   $_POST['page_description'];
    9. $page_content   =   $_POST['page_content'];
    10.  
    11. echo json_encode(array('text' => $page_title));
    [js]$(document).ready(function() {
    $('.btn').bind('click', function() {
    $.ajax({
    url: 'http://localhost/cms/admin/editPage.php',
    dataType: 'json',
    data: $('#pageEdit').serialize(),
    cache: false,
    success: function (data)
    {
    alert(data.text);
    }
    });
    });
    }); [/js]
     
  3. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    ... и при использовании $.ajax по дефолту вроде GET метод определен, а ты "встречаешь" через POST.
     
  4. mark2010

    mark2010 Активный пользователь

    С нами с:
    18 авг 2010
    Сообщения:
    80
    Симпатии:
    0
    Понял, спасибо.

    Самый главный вопрос: как эту радость передавать POSTом? type=POST почему-то не работает... а гетом - у меня целая страница будет в коде передаваться, она по-любому больше килобайта будет весить, может просто не вписаться в стандарты.

    И ещё. Вот предположим я данные записал в базу. Мне нужно что-то вернуть клиенту. Просто указание
    PHP:
    1.  
    2.         'text'  =>  'успешно'
    3. ));
    4. echo $var;
    5.  
    Не работает. Я понимаю почему (передаётся форма, а данной переменной там нет). Но как это побороть? Причём заранее абсолютно неизвестно что буду передавать...
     
  5. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    бред какойто.
    используй $.post() или $.get() и не нужно ничего дополнительно указывать.
    $.post('http://localhost/cms/admin/editPage.php', $('#pageEdit').serialize(), function(data){alert(data.text);}, 'json');

    +

    echo json_encode(array('text' => $POST['var']));
     
  6. mark2010

    mark2010 Активный пользователь

    С нами с:
    18 авг 2010
    Сообщения:
    80
    Симпатии:
    0
    Апельсин
    Не работает в таком варианте! Просто без ошибки, но ничего не происходит.... это не бред, я хочу разобраться в чём причина...
     
  7. mark2010

    mark2010 Активный пользователь

    С нами с:
    18 авг 2010
    Сообщения:
    80
    Симпатии:
    0
  8. mark2010

    mark2010 Активный пользователь

    С нами с:
    18 авг 2010
    Сообщения:
    80
    Симпатии:
    0
    Разобрался, у меня в начале скрипта стоял .ajaxSetup с type=GET, поэтому пхп не мог ничего понять что нужно...
    Вопрос остаётся открытым о передаче данных...

    Т.е. смотрите: взял данные, записал их в базу. Запись может пройти либо успешно либо с ошибкой, о чём мне надо известить клиента хотя бы тем же алертом. Каким образом дополнительные данные (переменную из пхп, не входящую в состав формы) передать клиенту?
     
  9. mark2010

    mark2010 Активный пользователь

    С нами с:
    18 авг 2010
    Сообщения:
    80
    Симпатии:
    0
    Т.е. грубо говоря, ещё раз скажу: в PHP будет некая булевская переменная (может и не булевская), значение которой надо вывести клиенту. Вот такая задача.

    Вопрос элементарный, но все мы когда-то учились :)
     
  10. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    В начале скрипта обьявляешь $error = null;
    По мере работы скрипта в эту переменную записываешь ошибки (можно и массив для этого, а можно и так). Потом эти ошибки отдаешь в браузер:

    echo json_encode(array('error' => $error));


    А в хтмл-файле проверяешь через js:
    if(data.error == null)
    {
    действия, когда все успешно
    }
    else alert(data.error);//или выдаем ошибку
     
  11. mark2010

    mark2010 Активный пользователь

    С нами с:
    18 авг 2010
    Сообщения:
    80
    Симпатии:
    0
    Ну так это и так понятно.... если бы такой вариант работал, я бы и не спрашивал :)
     
  12. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    а он и работает. лично у меня. код выложи или сам копайся в нем
     
  13. mark2010

    mark2010 Активный пользователь

    С нами с:
    18 авг 2010
    Сообщения:
    80
    Симпатии:
    0
    Ну как бы смотри:

    PHP:
    1.  
    2. <?php
    3.  
    4. require $_SERVER['DOCUMENT_ROOT'] . '/cms/config/config.php';
    5.  
    6. $message = 'bvb';
    7. $error = null;
    8.  
    9. //получим данные
    10. $page_title     =   $_REQUEST['pageTitle'];
    11. $page_keywords  =   $_REQUEST['page_keywords'];
    12. $page_descr     =   $_REQUEST['page_description'];
    13. $page_content   =   $_REQUEST['page_content'];
    14.  
    15. $query = 'UPDATE pages SET page_title = "'.$page_title.'", page_description = "'.$page_descr.'", page_keywords = "'.$page_keywords.'", page_content = "'.$page_content.'"';
    16.  
    17. $db->query($query);
    18.  
    19. $mysql_error = mysql_error();
    20.  
    21. if (!empty($mysql_error))
    22. {
    23.     $message = 'Произошла ошибка: ' . $mysql_error;
    24.     $error = true;
    25. }
    26.  
    27. else
    28. {
    29.     $message = 'Отредактировано';
    30.     $error = null;
    31. }
    32.  
    33. echo json_encode(array('error' => $error, 'message' => $message));
    34.  
    35. ?>
    36.  
    AJAX:
    Код (Text):
    1.  
    2. $(document).ready(function() {
    3.    $('.btn').bind('click', function() {
    4.      $.post('http://localhost/cms/admin/editPage.php', $('#pageEdit').serialize(), function(msg)
    5.      {
    6.          if (msg.error == null)
    7.          {
    8.             alert(msg.message);
    9.          }
    10.          else
    11.          {
    12.             alert(msg.message);
    13.          } 
    14.      }, 'json');
    15.    });  
    16. });
    В ответ получаю null. Что не так?
     
  14. mark2010

    mark2010 Активный пользователь

    С нами с:
    18 авг 2010
    Сообщения:
    80
    Симпатии:
    0
    А самое главное - реального обновления почему-то нее происходит, хотя код, вроде бы правильный. Конечно же изменил SQL, добавив условие WHERE :) это само собой :) но всё равно ничего не происходит. Я так полагаю, что мог что-то забыть... но в этом случае mysql_error() не должна быть пустой...и соответственно выводиться клиенту... как раз та обратная связь, которой я добиваюсь...
     
  15. mark2010

    mark2010 Активный пользователь

    С нами с:
    18 авг 2010
    Сообщения:
    80
    Симпатии:
    0
    Переделал отрывок кода вот таким образом:
    PHP:
    1.  
    2. if (!empty($mysql_error))
    3. {
    4.     $message = 'Произошла ошибка: ' . $mysql_error;
    5.     $error = 1;
    6.     echo json_encode(array('error' => $error, 'msg' => $message));
    7. }
    8.  
    9. else
    10. {
    11.     $message = 'Отредактировано';
    12.     $error = null;
    13.     echo json_encode(array('error' => $error, 'msg' => $message));
    14. }
    15.  
    ноль реакции...
     
  16. mark2010

    mark2010 Активный пользователь

    С нами с:
    18 авг 2010
    Сообщения:
    80
    Симпатии:
    0
    Совсем хрень!

    Код (Text):
    1.  
    2. $.post('http://localhost/cms/admin/editPage.php', $('#pageEdit').serialize(), function(data)
    3.      {
    4.          alert(data.msg);
    5.      }, 'json');
    6.    });  
    alert(data.error) даёт 1.
    alert(data.msg) даёт null.

    Типа ошибка произошла, но что за ошибка - хрен скажу ))) ну что ж такое-то???
     
  17. Апельсин

    Апельсин Активный пользователь

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    echo json_encode(array('error' => $error, 'message' => $message));
    эту строчку замени временно на
    $error = 1;
    $message = 2;
    echo json_encode(array('error' => $error, 'message' => $message));


    это смени
    $(document).ready(function() {
    $('.btn').bind('click', function() {
    $.post('http://localhost/cms/admin/editPage.php', $('#pageEdit').serialize(), function(msg)
    {
    if (msg.error == null)
    {
    alert(msg.message);
    }
    else
    {
    alert(msg.message);
    }
    }, 'json');
    });
    });
    на

    $(document).ready(function() {
    $('.btn').bind('click', function() {
    $.post('/cms/admin/editPage.php', $('#pageEdit').serialize(), function(msg)
    {
    alert(msg.error);
    alert(msg.message);
    }, 'json');
    });
    });