Как сделать передачу POST посредством AJAX без перезагрузки стр.

Тема в разделе "Как сделать...", создана пользователем Дмитрий Кесаев, 28 ноя 2012.

  1. Дмитрий Кесаев

    Дмитрий Кесаев aka Zlobniy Babko

    Заблокирован
    Регистр.:
    10 май 2007
    Сообщения:
    1.332
    Симпатии:
    1.265
    Собственно вопрос.
    Имеется форма
    PHP:
    {section name=i loop=$order_status_report}{if $order_status_report[i].status_idpost ne ""}
                    <
    form action="tracepostal.php" target="_blank" method="post" id="action">
                    <
    div align="center">
                    <
    table class=voting border="0"><tr>
                    <
    input type="text" name="idposts" id="idposts" value="{$order_status_report[i].status_idpost}/>
                    <
    input type="submit" name="action" id="action" value="{$smarty.const.STRING_POSTAL_GET}/></tr></table>
                    </
    div></form>
                    {/if}{/
    section}
    В отдельном окне открывается файл tracepostal.php и данные с переменной $id_posts передаются. Все работает на ура.


    Как сделать чтоб страничка не открывалась в новом окне, а обрабатывалась без перезагрузки странички.


    Удалось вывести без перезагрузки страничку, но данные не передает она(((

    [​IMG]

    PHP:
    {literal}<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script>
        <script src="http://malsup.github.com/jquery.form.js"></script>
        <script type="text/javascript" src="http://scriptjava.net/source/scriptjava/scriptjava.js"></script>
    <script type="text/javascript">
          function SendPost() {
            $$a({
                type:'post',//тип запроса: get,post либо head
                url:'tracepostal.php',//url адрес файла обработчика
                data:{'idposts':document.getElementById("idposts").Value},//параметры запроса
                response:'text',//тип возвращаемого ответа text либо xml
                success:function (data) {//возвращаемый результат от сервера
                    $$('result',$$('result').innerHTML+'<br />'+data);
                }
            });
        }
     
        </script>{/literal}
    <form id="action" action="tracepostal.php" method="post">
    <input type="text" name="idposts" id="idposts" value="{$order_status_report[i].status_idpost}" />
    <input type="button" name="action" id="action" value="{$smarty.const.STRING_POSTAL_GET}"  onclick="SendPost()"/>
    </form></br>
    </br><div id="result"></div>
    Куда копать?
     
  2. SolutionFix

    SolutionFix 17 лет програмлю ;)

    Регистр.:
    20 ноя 2006
    Сообщения:
    272
    Симпатии:
    318
    Я (чтобы не копаться в шаблонизаторе и не вникать в реальную CMS) cовместил вывод html-формы и файл-генератор данныхв один. Вот получилось, если сохранить в файл tracepostal.php, то нормально выводит то что ожидается.

    HTML:
    <?php
        if(isset($_REQUEST['idposts'])) {
            echo 'POST idposts value passed: ' . htmlspecialchars($_REQUEST['idposts']);
            exit;
        }
    ?>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.js"></script>
    <script>
        function SendPost() {
            $.post('tracepostal.php', {idposts: $("#idposts").val()}, function(data) {
              $('#result').html(data);
            });
        }
    </script>
    <form action="tracepostal.php" target="_blank" method="post" id="action">
                    <div align="center">
                    <table class=voting border="0"><tr>
                    <tr><td>
                    <input type="text" name="idposts" id="idposts" value="test1" /><br>
                    <input type="submit" name="action" id="action" value="test2" onclick="SendPost()" />
                    </td></tr>
                    </table>
                    </div></form>
    <div id="result"></div>
     
    Zlobniy Babko нравится это.
  3. cruide

    cruide Писатель

    Регистр.:
    25 июл 2012
    Сообщения:
    8
    Симпатии:
    22
    Обычно для подобных вещей используется такое:
    PHP:
    if( !headers_sent() ) {
        
    header('Content-type: text/html; charset=utf-8');
    }
    и ещё в строке:
    $.post('tracepostal.php', {idposts: $("#idposts").val()}, function(data) {
    лучше сделать так:$.post('tracepostal.php', {idposts: $("#action").serialize()}, function(data) {

    ИМХО
     
    Zlobniy Babko нравится это.