Ajax проблема с отправкой post запроса

Тема в разделе "JavaScript", создана пользователем mr-graffity, 6 июн 2012.

Статус темы:
Закрыта.
Модераторы: ZiX
  1. mr-graffity

    mr-graffity

    Регистр.:
    29 июл 2010
    Сообщения:
    163
    Симпатии:
    38
    Есть скрипт на ajax который отправляет пост запрос php скрипту на выборку из sql базы данных.
    В ajax скрипте форма для редактирования заполняется полученными данными.
    После изменения содержимого нужно отправить данные обратно php скрипту чтоб он обновил данные в базе.
    Запрос на выборку прекрасно отправляется и форма отлично заполняется но вот запрос на обновление не уходит.
    Помогите не могу разобраться в чем дело.
    Вот ajax скрипт
    Код:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>search</title>
    <link rel="stylesheet" type="text/css" href="my.css">
     
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript">
     
    $(function() {
     
        $(".search_button").click(function() {
            // получаем то, что написал пользователь
            var searchString    = $("#search_box").val();
            // формируем строку запроса
            var data            = 'search='+ searchString;
     
            // если searchString не пустая
            if(searchString) {
                // делаем ajax запрос
                $.ajax({
                    type: "POST",
                    url: "do_search.php",
                    data: data,
                    dataType: "json",
                    success: function(data)
                    { // запустится после получения резуотатов
                        $("#results").show();
                        $("#resultID").text(data.id);
                        $("#resultINT").text(data.introtext);
                        $("#resultFUL").text(data.fulltext);
                       
                  }               
                });
            }
            return false;
        });
        $(".edit_button").click(function() {
            // получаем то, что написано в формах
            var StringID    = $("#resultID").val();
            var StringINT    = $("#resultINT").val();
            var StringFUL    = $("#resultFUL").val();
            // формируем строку запроса
            var data            = 'StringID='+ StringID+'&StringINT='+StringINT+'&StringFUL='+StringFUL;
     
            // если StringID не пустая
            if(StringID) {
                // делаем ajax запрос
                $.ajax({
                    type: "POST",
                    url: "do_search.php",
                    data: data,
                    dataType: "json",
                    success: function(data)
                    { // запустится после получения резуотатов
                        $("#results").empty();
                        $("#results").show();
                        $("#resultID").text(data.id);
                        $("#resultINT").text(data.introtext);
                        $("#resultFUL").text(data.fulltext);
                       
                  }   
                });
            }
            return false;
        });   
    });
    </script>
     
     
    </head>
    <body>
    <h3 style="text-align:center;">Попробуйте ввести фразу</h3>
    <div id="container">
    <div style="margin:20px auto; text-align: center;">
    <form method="post" action="do_search.php">
        <input type="text" name="search" id="search_box" class='search_box'/>
        <input type="submit" value="Поиск" class="search_button" /><br />
    </form>
    </div>
    <div>
     
    <div id="searchresults">Результаты для <span class="word"></span></div>
    <ul id="results" class="update">
    <form id="editor" method="post" action="<? $PHP_SELF ?> " method=post enctype=multipart/form-data  width="50%" height="50%"><p>ID<br/><textarea id="resultID" name="resultID" rows="1" cols="5" id="resultID" class="resultID"></textarea></p><p>Анонс<br/><textarea id="resultINT" name="resultINT" rows="8" cols="100" id="resultINT" class="resultINT"></textarea></p><p>Статья<br/><textarea id="resultFUL" name="resultFUL" rows="8" cols="100" id="resultFUL" class="resultFUL"></textarea></p><p><input type="submit" class="edit_button"/></p></form>
    </ul>
     
    </div>
    </div>
     
    </body>
    </html>
    Вот скрипт на php который обрабатывает
    Код:
    <?php
    //получаем данные через $_POST
    if (isset($_POST['search'])) {
        // подключаемся к базе
        include('db.php');
        $db = new db();
        // никогда не доверяйте входящим данным! Фильтруйте всё!
        $word = mysql_real_escape_string($_POST['search']);
        // Строим запрос
        $sql = "SELECT * FROM `jos_content` WHERE `fulltext` LIKE '%" . $word . "%' or `introtext` LIKE '%" . $word . "%' or 'state' LIKE '1' LIMIT 0 , 30";   
       
        // Получаем результаты
        $row = $db->select_list($sql);
        if(count($row)==1) {
        $q = mysql_query($sql);
        $res = mysql_fetch_assoc($q);
        echo json_encode($res);
            } else {
            echo '<li>Не уникальный запрос!</li>';
        }       
    }
    if (isset($_POST['resultID'])) {
        // подключаемся к базе
        include('db.php');
        $db1 = new db();
        // никогда не доверяйте входящим данным! Фильтруйте всё!
        $resultID = mysql_real_escape_string($_POST['resultID']);
        $resultINT = mysql_real_escape_string($_POST['resultINT']);
        $resultFUL = mysql_real_escape_string($_POST['resultFUL']);
        // Строим запрос   
        $sql = "UPDATE `jos_content` SET `introtext` = '".$resultINT."',`fulltext` = '".$resultFUL."' WHERE `jos_content`.`id` = ".$resultID;
        // Получаем результаты   
        $q = mysql_query($sql);
        //echo $sql.'<li>Обновили!</li><br>';
        $sql1 = "SELECT * FROM `jos_content` WHERE `jos_content`.`id` = ".$resultID;   
        $q1 = mysql_query($sql1);
        $res1 = mysql_fetch_assoc($q1);
        echo json_encode($res1);
        }
     
    ?>
    Вот скрипт подключения к joomla базе
    Код:
    <?php
      class db {
     
        function __construct()
        {
            global $dbh;
            if (!is_null($dbh)) return;
            $dbh = mysql_pconnect('localhost', 'root', '');
            mysql_select_db('stroydump');
            mysql_query('SET NAMES utf8');
        }
     
        function select_list($query)
        {
            $q = mysql_query($query);
            if (!$q) return null;
            $ret = array();
            while ($row = mysql_fetch_array($q, MYSQL_ASSOC)) {
                array_push($ret, $row);
            }
            mysql_free_result($q);
            return $ret;
        }   
      }
    ?>
    
     
  2. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    попробуйте выполнить запрос $(".edit_button ").click(function()
    используя метод live()
    $(".edit_button").live("click", function()....
    данные, полученные после загрузки контента страницы, в частности посредством ajax запроса не подхватываются яваскриптами... их можно активировать только используя live() или bind()
    http://slyweb.ru/jquerydoc/live-type-fn.php
    кроме того немного смущает этот кусок кода:
    PHP:
          // формируем строку запроса
            
    var data            'StringID='StringID+'&StringINT='+StringINT+'&StringFUL='+StringFUL;
     
            
    // если StringID не пустая
            
    if(StringID) {
    чего вдруг проверка на StringID если переменная - data, вот на её наличие и нужно проверять...
     
  3. mr-graffity

    mr-graffity

    Регистр.:
    29 июл 2010
    Сообщения:
    163
    Симпатии:
    38
    Data это строка с хапросом она будет всегда существовать и будет не пустая, а StringID это передаваемый параметр он может существовать а может и нет
     
  4. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    Согласен...
    вот еще мысль:
    здесь можно ещё здесь заменить:
    PHP:
      $("#results").show();
                        $(
    "#resultID").text(data.id);
                        $(
    "#resultINT").text(data.introtext);
                        $(
    "#resultFUL").text(data.fulltext);
    на
    PHP:
     
      
    $("#results").show();
                        $(
    "#resultID").val(data.id);
                        $(
    "#resultINT").val(data.introtext);
                        $(
    "#resultFUL").val(data.fulltext);
     
     
  5. mr-graffity

    mr-graffity

    Регистр.:
    29 июл 2010
    Сообщения:
    163
    Симпатии:
    38
    val на text поменял уже давно не катит ни так ни так
     
  6. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    Даже не знаю что и посоветовать.... ну ладно... смотрите:
    при отправке измененных данных формируется переменная var data= 'StringID='+ StringID+'&StringINT='+StringINT+'&StringFUL='+StringFUL;
    в ней соответственно передаются StringID, StringINT, StringFUL
    при этом в файле do_search.php идет проверка: if (isset($_POST['resultID'])) {
    а где он этот resultID? его то не передаете в файл...
    и да... поглядел внимательно html разметку Вашего скрипта... есть пару моментов:
    Код:
    <p>ID<br/><textarea id="resultID" name="resultID" rows="1" cols="5" id="resultID" class="resultID"></textarea></p>
    <p>Анонс<br/><textarea id="resultINT" name="resultINT" rows="8" cols="100" id="resultINT" class="resultINT"></textarea></p>
    <p>Статья<br/><textarea id="resultFUL" name="resultFUL" rows="8" cols="100" id="resultFUL" class="resultFUL"></textarea></p>
    
    Зачем в textarea id указанны по два раза? Кроме того:
    Код:
    <form id="editor" method="post" action="<? $PHP_SELF ?> " method=post enctype=multipart/form-data  width="50%" height="50%">
    
    action="<? $PHP_SELF ?> " - это для чего? если указать ссылку на этот же файл, то достаточно action="" такой формы записи... И если не ошибаюсь в последних версиях PHP $PHP_SELF уже не используется.. вместо нее применяется $_SERVER['PHP_SELF']...
     
  7. mr-graffity

    mr-graffity

    Регистр.:
    29 июл 2010
    Сообщения:
    163
    Симпатии:
    38
    Все исправил все работает!
    Но есть одно "но"

    1. В строке поиска вводим фразу для поиска редактируемой статьи
    2. Жмем поиск

    3. Форма заполняется из трех полей
    ид записи
    анонс
    тело статьи заполняется данными
    4. Редактируем любую часть статьи или анонса
    5. Жмем отправить
    Статья успешно изменилась в базе!
    Но если я введу новую фразу для поиска, то наши поля заполнятся новыми данными, заисключением того поля которое мы до этого редактировали, оно как и прежде будет отображать отредактированные данные, т.е. ищем разные фразы, поля заполняются кроме того в котором были сделаны изменения и отправлены в базу. Вот новый код скрипта
    Код:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
     
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>PHP, jQuery search demo</title>
    <link rel="stylesheet" type="text/css" href="my.css">
     
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
    <script type="text/javascript">
     
    $(function() {
     
        $(".edit_button").click(function() {
            // получаем то, что написал пользователь
            var resultID    = $("#resultID").val();
            var resultINT    = $("#resultINT").val();
            var resultFUL    = $("#resultFUL").val();
            // формируем строку запроса
            var data            = 'resultID='+ resultID+'&resultINT='+resultINT+'&resultFUL='+resultFUL;
     
            // если resultID  не пустая
            if(resultID) {
                // делаем ajax запрос
                $.ajax({
                    type: "POST",
                    url: "do_searcha.php",
                    data: data
                });
            }
            return false;
        });
    });
    </script>
    <script type="text/javascript">
     
    $(function() {
     
        $(".search_txt").click(function() {
            // получаем то, что написал пользователь
            var searchString    = $("#search_box").val();
            // формируем строку запроса
            var data            = 'search='+ searchString;
     
            // если searchString не пустая
            if(searchString) {
                // делаем ajax запрос
                $.ajax({
                    type: "POST",
                    url: "do_searcha.php",
                    data: data,
                    dataType: "json",
                    beforeSend: function(html) { // запустится до вызова запроса
                        $("#resultID").empty();
                        $("#resultINT").empty();
                        $("#resultFUL").empty();
                  },
                    success: function(data)
                    { // запустится после получения резуотатов
                        $("#results").show();             
                        $("#resultID").text(data.id);
                        $("#resultINT").text(data.introtext);
                        $("#resultFUL").text(data.fulltext);                 
                  } 
                });
            }
            return false;
        });
    }); 
    </script> 
     
    </head>
    <body>
    <h3 style="text-align:center;">Попробуйте ввести слово ajax</h3>
    <div id="container">
    <div style="margin:20px auto; text-align: center;">
    <div style="margin:20px auto; text-align: center;">
    <form method="post" action="do_search.php">
        <input type="text" name="search" id="search_box" class='search_box'/>
        <input type="submit" value="Поиск" class="search_txt" /><br />
    </form>
    </div>
    <div id="searchresults">Результаты для <span class="word"></span></div>
    <ul id="results" class="update">
    <form method="post" action="do_search.php"> 
        <p>ID<br/>
        <textarea name="resultID" id="resultID" class="resultID" rows="1" cols="5" id="resultID"></textarea>
        </p><p>Анонс<br/>
        <textarea name="resultINT" id="resultINT" class="resultINT" rows="8" cols="100" id="resultINT"></textarea>
        </p><p>Статья<br/>
        <textarea name="resultFUL" id="resultFUL" class="resultFUL" rows="8" cols="100" id="resultFUL"></textarea>
        </p><p>
        <input type="submit" value="Изменить" class="edit_button"/></p>
    </form>
    </ul>
    </div>
     
    </div>
     
    </body>
    </html>
    Вот обработчик на сервере
    Код:
    <?php
    //получаем данные через $_POST
    if (isset($_POST['search'])) {
        // подключаемся к базе
        include('db.php');
        $db = new db();
        // никогда не доверяйте входящим данным! Фильтруйте всё!
        $word = mysql_real_escape_string($_POST['search']);
        // Строим запрос
        $sql = "SELECT * FROM `jos_content` WHERE `fulltext` LIKE '%" . $word . "%' or `introtext` LIKE '%" . $word . "%' or 'state' LIKE '1' LIMIT 0 , 30"; 
     
        // Получаем результаты
        $row = $db->select_list($sql);
        if(count($row)==1) {
        $q = mysql_query($sql);
        $res = mysql_fetch_assoc($q);
        echo json_encode($res);
            } else {
            echo '<li>Не уникальный запрос!</li>';
        }     
    }
    if (isset($_POST['resultID'])) {
        // подключаемся к базе
        include('db.php');
        $db = new db();
        // никогда не доверяйте входящим данным! Фильтруйте всё!
        $resultID = mysql_real_escape_string($_POST['resultID']);
        $resultINT = mysql_real_escape_string($_POST['resultINT']);
        $resultFUL = mysql_real_escape_string($_POST['resultFUL']);
        // Строим запрос 
        $sql1 = "UPDATE `jos_content` SET `introtext` = '".$resultINT."',`fulltext` = '".$resultFUL."' WHERE `jos_content`.`id` = ".$resultID;
        // Получаем результаты 
        $q = mysql_query($sql1);
        //echo $sql.'<li>Обновили!</li><br>';
        $sql = "SELECT * FROM `jos_content` WHERE `jos_content`.`id` = ".$resultID;
        // Получаем результаты
        $row = $db->select_list($sql);
        if(count($row)==1) {
            $end_result = '';
            foreach($row as $r)
            {         
                $resultID        = $r['id'];                 
                $resultINT        = $r['introtext'];                 
                $resultFUL        = $r['fulltext'];                 
            } 
            echo "<p>ID<br/><textarea id=\"resultID\" name=\"resultID\" rows=\"1\" cols=\"5\" id=\"resultID\" class=\"resultID\">".$resultID."</textarea></p><p>Анонс<br/><textarea id=\"resultINT\" name=\"resultINT\" rows=\"8\" cols=\"100\" id=\"resultINT\" class=\"resultINT\">".$resultINT."</textarea></p><p>Статья<br/><textarea id=\"resultFUL\" name=\"resultFUL\" rows=\"8\" cols=\"100\" id=\"resultFUL\" class=\"resultFUL\">".$resultFUL."</textarea></p><p><input type=\"submit\" class=\"edit_button\"/></p>";
                } else {
            echo '<li>Не уникальный запрос!</li>';
        }     
    } 
    ?>
    Сласс для работы с базой не изменился но на всякий случай вставлю, мож кому пригодится
    Код:
    <?php
      class db {
     
        function __construct()
        {
            global $dbh;
            if (!is_null($dbh)) return;
            $dbh = mysql_pconnect('localhost', 'root', '');
            mysql_select_db('stroydump');
            mysql_query('SET NAMES utf8');
        }
     
        function select_list($query)
        {
            $q = mysql_query($query);
            if (!$q) return null;
            $ret = array();
            while ($row = mysql_fetch_array($q, MYSQL_ASSOC)) {
                array_push($ret, $row);
            }
            mysql_free_result($q);
            return $ret;
        } 
      }
    ?>
    
    live("click", function() не помогло по прежнем поле не обновляется после редактирования

    bind() так же не помог
     
  8. dino

    dino

    Регистр.:
    28 май 2009
    Сообщения:
    550
    Симпатии:
    204
    попробуйте так:
    Код:
        $(".search_txt").click(function() {
            // получаем то, что написал пользователь
            var searchString    = $("#search_box").val();
            // формируем строку запроса
            var data            = 'search='+ searchString;
     
            // если searchString не пустая
            if(searchString) {
                // делаем ajax запрос
                $.ajax({
                    type: "POST",
                    url: "do_searcha.php",
                    data: data,
                    dataType: "json",
                    beforeSend: function(html) { // запустится до вызова запроса
                        $("#resultID").val("");
                        $("#resultINT").val("");
                        $("#resultFUL").val("");
                  },
                    success: function(data)
                    { // запустится после получения резуотатов
                        $("#results").show();             
                        $("#resultID").val(data.id);
                        $("#resultINT").val(data.introtext);
                        $("#resultFUL").val(data.fulltext);                 
                  } 
    
    уберите из <textarea> лишние id, замените <textarea name="resultID" id="resultID" class="resultID" rows="1" cols="5" id="resultID"></textarea> на обычный <input type="text" name="resultID" id="resultID" class="resultID"> (зачем для отображения нескольких цифр целое <textarea> использовать?:nezn: ) По хорошему resultID вообще в хайд загнать нужно, ведь насколько я понимаю, этот параметр как раз изменяться ни в коем случае не должен...
     
    mr-graffity нравится это.
Статус темы:
Закрыта.