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

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

aka Zlobniy Babko
Заблокирован
Регистрация
10 Май 2007
Сообщения
1.332
Реакции
1.237
  • Автор темы
  • Заблокирован
  • #1
Собственно вопрос.
Имеется форма
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 передаются. Все работает на ура.


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


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

Bezimyanni_8903048_6438330.jpg


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>

Куда копать?
 
Я (чтобы не копаться в шаблонизаторе и не вникать в реальную 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>
 
Обычно для подобных вещей используется такое:
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) {

ИМХО
 
Назад
Сверху