Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача формы скрипту через Ajax 
V
    Опции темы
StachelDraht
Дата 18.1.2009, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



Всем привет!
Надеюсь пишу в тот раздел.
У меня вопрос.
Как передать все значения из формы php скрипту через Ajax?

Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>AJAX GuestBook</title>
<script language="JavaScript" src="ajax.js" type="text/javascript"></script>
</head>

<body>
<p id="result"></p>
<form method="post">
<table width="317" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td width="90">Name:</td>
    <td width="227"><label>
      <input type="text" name="name" id="name" />
    </label></td>
  </tr>
  <tr>
    <td>E-Mail:</td>
    <td><input type="text" name="mail" id="mail" /></td>
  </tr>
  <tr>
    <td>Message:</td>
    <td><label>
    <textarea name="message" id="message" cols="24" rows="5"></textarea>
    </label></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>
      <input type="submit" name="button" id="button" value="Отправить" onClick="javascript:sendRequest('test.php', 'result', getRequest);"/>
    </td>
  </tr>
</table>
</form>
</body>
</html>

ajax.js
Код

function createHttpRequest() {

    var httpRequest;

    var browser = navigator.appName;



    if (browser == "Microsoft Internet Explorer") {



        httpRequest = new ActiveXObject("Microsoft.XMLHTTP");

    } else {

        httpRequest = new XMLHttpRequest();

    }



    return httpRequest;

}

function sendRequest(file, _resultId, getRequestProc) {

    resultId = _resultId;

    document.getElementById(resultId).innerHTML = 'Please wait...';

    httpRequest.open('get', file);



    httpRequest.onreadystatechange = getRequestProc;

    httpRequest.send(null);

} 

function getRequest() {

    if (httpRequest.readyState == 4) {

        document.getElementById(resultId).innerHTML = httpRequest.responseText;

    }

}

var httpRequest = createHttpRequest();

var resultId = '';




Если сделать просто ссылку с 
Код

value="Отправить" onClick="javascript:sendRequest('test.php', 'result', getRequest);"

результат выводит замечательно

а из формы и с помощью кнопки ничего не работает.

Спасибо!

Это сообщение отредактировал(а) StachelDraht - 18.1.2009, 20:50
PM MAIL   Вверх
bars80080
Дата 18.1.2009, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



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

вот скажи, ты ссылкой передаёшь значения формы? наверное, нет. просто отсылаешь запрос (без данных) и получаешь ответ - результат

а формулировка "отослать форму" вообще не коректна. надо отослать данные из формы, но перед этим их нужно собрать, присоединить к адресу (file), раз уж метод get, и затем уже отослать

повыдёргивайте данные из инпутов за id, присоедините к адресу file += '?name=' + document.getElementById('name').value + '&mail=' + docu...; и т.д.
и уже такую строку засуньте в httpRequest.open('get', file);

PM MAIL WWW   Вверх
StachelDraht
Дата 18.1.2009, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



bars80080, 
вобще честно говоря не очень понимаю что делаю. Методом тыка.
Сейчас попробую, спасибо за ответ!
PM MAIL   Вверх
StachelDraht
Дата 18.1.2009, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



Код

<input type="submit" name="add" id="button" value="Отправить" onClick="javascript:sendRequest('dogb.php+='?name=' + document.getElementById('name').value + '&mail=' + document.getElementById('mail').value + '&message=' + document.getElementById('message').value', 'result', getRequest);" />

експлорер говорит что ошибка

А если использовать метод post, таким же макаром надо отсылать?
И при нажатии на кнопку, результат выводится только на секунду. Почему так?

Это сообщение отредактировал(а) StachelDraht - 18.1.2009, 22:48
PM MAIL   Вверх
bars80080
Дата 19.1.2009, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



Код

<input type="submit" name="button" id="button" value="Отправить" onClick="javascript:sendRequest('http://server.ru/test.php', 'result', getRequest);"/>

Код

function sendRequest(file, _resultId, getRequestProc) {

    resultId = _resultId;

    document.getElementById(resultId).innerHTML = 'Please wait...';

    file += '?name=' + document.getElementById('name').value + '&mail=' + document.getElementById('mail').value + '&message=' + document.getElementById('message').value;

    httpRequest.open('get', file);
    httpRequest.onreadystatechange = getRequestProc;

    httpRequest.send(null);

}

PM MAIL WWW   Вверх
StachelDraht
Дата 19.1.2009, 01:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



bars80080, спасибо тебе большое!
Все равно многое не понимаю.
Я думал файл ajax.js на все случаи жизни... но про это еще почитаю.
А вот почему результат отображается меньше секунды и куда то исчезает?
PM MAIL   Вверх
bars80080
Дата 19.1.2009, 10:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



Цитата(StachelDraht @  19.1.2009,  00:20 Найти цитируемый пост)
А вот почему результат отображается меньше секунды и куда то исчезает?

это я уже не скажу. может другой код виноват? приведи полностью всю страницу
PM MAIL WWW   Вверх
StachelDraht
Дата 19.1.2009, 14:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



Код

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>AJAX GuestBook</title>
<script language="JavaScript" src="ajax.js" type="text/javascript"></script>
</head>

<body>
<div id="result"></div>
<form action=""  method="post">
<table width="317" border="0" cellpadding="0" cellspacing="0">
  <tr>
    <td width="90">Name:</td>
    <td width="227"><label>
      <input type="text" name="name" id="name" />
    </label></td>
  </tr>
  <tr>
    <td>E-Mail:</td>
    <td><input type="text" name="mail" id="mail" /></td>
  </tr>
  <tr>
    <td>Message:</td>
    <td><label>
    <textarea name="message" id="message" cols="24" rows="5"></textarea>
    </label></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
    <td>
      <input type="submit" name="add" id="button" value="Отправить" onClick="javascript:sendRequest('http://localhost/dogb.php', 'result', getRequest);"/>
    </td>
  </tr>
</table>
</form>

<a href="" onClick="javascript:sendRequest('dogb.php', 'result', getRequest);">Test!</a>
</body>
</html>



и грубо говоря обработчик
Код

<?
//var_dump($_GET);
$database = "test_table";
$connection = mysql_connect ("localhost", "user", "pass");
if (!$connection)
    {
        exit("Error c");
    }
    else
    { 
            echo ("");
    }
    
$db = @mysql_select_db ($database, $connection)
    or die("Can`t select DataBase");
    
$name = $_GET['name'];
$mail = $_GET['mail'];
$message = $_GET['message'];
//echo "<br>".$name."<br>".$mail."<br>".$message;
mysql_query("INSERT INTO book SET id='', name='".$name."', mail ='".$mail."', message ='".$message."' ");

function show() {
$show = mysql_query("SELECT * FROM book order by id");
if (!$show) exit(mysql_error());
echo "<table>";
while(list($id, $name, $mail, $message) = mysql_fetch_row($show)) {

    echo '<tr>';
      echo '
    <td>'.$id.'</td>
    <td>'.$name.'</td>
    <td>'.$mail.'</td>
    <td>'.$message.'</td>
    </tr>
      ';
}
echo '</table>';
};
echo show();
?>


Есть какие нибудь не очень замудреные уроки по Ajax + php ???


Это сообщение отредактировал(а) StachelDraht - 19.1.2009, 15:16
PM MAIL   Вверх
bars80080
Дата 19.1.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прапор творюет
****
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 12022
Регистрация: 5.12.2007
Где: Königsberg

Репутация: 44
Всего: 315



так это всё на локалке?

попробуй написать так:
Код

<input type="submit" name="add" id="button" value="Отправить" onClick="javascript:sendRequest('http://localhost/dogb.php', 'result', getRequest); return false;"/>

PM MAIL WWW   Вверх
StachelDraht
Дата 19.1.2009, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



а я тестил и на локалке и сервере хостера, идентично

Добавлено через 3 минуты
Да, все работает!
Спасибо!
PM MAIL   Вверх
Aliance
Дата 21.1.2009, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 17
Всего: 137



Я бы советовал вместо input с типом submit, использовать button. Тогда и ложь возвращать не придется. Хотя тут палка о двух концах - тогда те, у кого отключен JS не смогут вообще отправить данные.
Следующее, аттрибуты обработчиков событий лучше писать в нижнем регистре. То есть все onClick заменить на onclick
И последнее, в псевдо-протокол javascript: необходимо писать только в ссылках, а не обработчиках событий.
PM MAIL WWW ICQ Skype   Вверх
StachelDraht
Дата 21.1.2009, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



Aliance, спасибо!
Буду иметь в виду.
PM MAIL   Вверх
finogeev
Дата 12.2.2009, 15:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 5.3.2007

Репутация: нет
Всего: нет



Ну раз все получилось, может финальным кодиком поделишься ... такая же сейчас ситуация встала ... Не могу в скрипт ajax передать данные из формы :(
PM MAIL ICQ   Вверх
StachelDraht
Дата 12.2.2009, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Не Опытный
**


Профиль
Группа: Участник
Сообщений: 429
Регистрация: 19.1.2006

Репутация: нет
Всего: 1



finogeev, 

Код

<head> 
    <script type="text/javascript" src="path/to/jquery.js"></script> 
    <script type="text/javascript" src="path/to/form.js"></script> 
 
    <script type="text/javascript"> 
        // wait for the DOM to be loaded 
        $(document).ready(function() { 
            // bind 'myForm' and provide a simple callback function 
            $('#myForm').ajaxForm(function() { 
                alert("Thank you for your comment!"); 
            }); 
        }); 
    </script> 
</head>

Код

<form id="myForm" action="comment.php" method="post"> 
    Name: <input type="text" name="name" /> 
    Comment: <textarea name="comment"></textarea> 
    <input type="submit" value="Submit Comment" /> 
</form>

Отсюда
С этого же сайта слей плагин
PM MAIL   Вверх
finogeev
Дата 13.2.2009, 08:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 5.3.2007

Репутация: нет
Всего: нет



Спасибо большое !!!!!!!!!!!
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0596 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.