Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > JavaScript, Ajax
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2012, 21:44   #1
errload
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 26
По умолчанию AJAX + PHP

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

Код:
function getXmlHttp(){
    var xmlhttp;
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
        catch (E) { xmlhttp = false; }
    }
    if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
        xmlhttp = new XMLHttpRequest();
    }
    return xmlhttp;
}
  
function sendButton() {
    var xmlhttp = getXmlHttp()
    xmlhttp.open('POST', 'ajax_login.php', true);
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4) {
            if(xmlhttp.status == 200) {
                var oldDiv = document.getElementById('block');
                var newDiv = document.createElement('div');
                newDiv.id = 'my-id';
                newDiv.innerHTML = xmlhttp.responseText;
                oldDiv.appendChild(newDiv);
             }
        }
    };
    xmlhttp.send(null);
}

<form method='post' name='form'>
    <input type='text' name='text'>
    <input type='button' value='send' onclick='sendButton();'>
</form>
errload вне форума Ответить с цитированием
Старый 17.05.2012, 23:32   #2
Fenex
Форумчанин
 
Аватар для Fenex
 
Регистрация: 15.02.2012
Сообщений: 821
По умолчанию

Например так:
Код:
function getXmlHttp(){
    var xmlhttp;
    try {
        xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
        try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
        catch (E) { xmlhttp = false; }
    }
    if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
        xmlhttp = new XMLHttpRequest();
    }
    return xmlhttp;
}
  
function sendText(s) {
    var xmlhttp = getXmlHttp()
    xmlhttp.open('GET', '/ajax_login.php?str='+s, true);
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4) {
            if(xmlhttp.status == 200) {
                var oldDiv = document.getElementById('block');
                var newDiv = document.createElement('div');
                newDiv.id = 'my-id';
                newDiv.innerHTML = xmlhttp.responseText;
                oldDiv.appendChild(newDiv);
             }
        }
    };
    xmlhttp.send(null);
}
<div id='block'></div>
<form>
    <input type='text' id='txt'>
    <input type='button' value='send' onclick="sendText(document.getElementById('txt').value);">
</form>
Код:
if (!isset($_GET["str"])) {
    echo "поле пусто";
    die;
}
echo "текст: " . $_GET["str"];
^-.-^ My GitHub
Fenex вне форума Ответить с цитированием
Старый 18.05.2012, 01:51   #3
errload
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 26
По умолчанию

Мне нужен POST запрос... Но, все равно спасибо!!!!! Я решил вопрос:
Код:
function sendButton() {
    var param = "text=" + document.form.text.value;
    var xmlhttp = getXmlHttp()
    xmlhttp.open('POST', 'ajax_login.php', true);
    xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xmlhttp.onreadystatechange = function() {
        if (xmlhttp.readyState == 4) {
            if(xmlhttp.status == 200) {
                var oldDiv = document.getElementById('block');
                var newDiv = document.createElement('div');
                newDiv.id = 'my-id';
                newDiv.innerHTML = xmlhttp.responseText;
                oldDiv.appendChild(newDiv);
             }
        }
    };
    xmlhttp.send(param);
}

Последний раз редактировалось errload; 18.05.2012 в 02:43.
errload вне форума Ответить с цитированием
Старый 18.05.2012, 12:02   #4
errload
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 26
По умолчанию

А такой вопрос: если у меня есть несколько форм, как мне их проверять в одном php файлу? Не создавать ведь для каждой функции новый...? Просто на значение $_POST['text'] != ""? Они ведь могут быть и заранее введены...
Или для этого лучше использовать JQuery?

Последний раз редактировалось errload; 18.05.2012 в 12:29.
errload вне форума Ответить с цитированием
Старый 18.05.2012, 13:47   #5
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

http://www.programmersforum.ru/showp...9&postcount=12
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 18.05.2012, 14:48   #6
errload
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 26
По умолчанию

Код:
С точки зрения серверного скрипта AJAX это обычный запрос, post || get, он также посылает значения и также их принимает.
C точки зрения php у каждой формы есть кнопка с уникальным именем, и php запрос проверяет именно ту форму, у которой нажата кнопка:
Код:
if(isset($_POST["submit"])) {
    ...
    тут проверяются и обрабатываются input'ы этой формы
    ...
}
То есть, я конкретно знаю какая форма пошла на обработку... А в коде выше, получается, проверка только самих полей.. Что тогда будет, если я заполню поле ввода первой формы и нажму кнопку второй, где AJAX запрос ссылается на один файл? Если код будет примерно таким:
Код:
if($_POST['text1'] != "") операция с text1
if($_POST['text2'] != "") операция с text2

Последний раз редактировалось errload; 18.05.2012 в 14:57.
errload вне форума Ответить с цитированием
Старый 18.05.2012, 15:10   #7
Naive
Раздолбайских Дел
Старожил
 
Аватар для Naive
 
Регистрация: 22.05.2009
Сообщений: 3,828
По умолчанию

С точки зрения функционального программирования, код можно разбивать на самостоятельные логические структуры (PHP хоть и недоязык, но на такое он способен). Какую функцию выполнять можно определить исходя из параметров, в которые можно добавить маленькую такую переменку "..?mode=1&...".
Если уж так принципиально чтобы каждый сабмит пылесосил инпуты своей формы, то на помощь всегда придет
Код:
<input type="hidden" name="mode" id="mode1" value="1">
Alar, верни репу!
Naive вне форума Ответить с цитированием
Старый 18.05.2012, 15:48   #8
errload
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 26
По умолчанию

Ясно, спасибо....
А еще, если в поле ввести русские символы, xmlhttp.responseText выводит что то вроде: ыфвафы Как это исправить?
errload вне форума Ответить с цитированием
Старый 18.05.2012, 17:08   #9
errload
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 26
По умолчанию

Я себе уже весь мозг вынес.. Передаю параметры, и обрабатываю их таким образом (для проверки работы):
Код:
	$login = trim(htmlspecialchars($_POST['login']));
	$password = trim(htmlspecialchars($_POST['password']));
	if($login != '111' and $password != '222')
		echo "Логин и/или пароль введены неверно..";
	else
		echo "Вы успешно авторизованы..";
Этот код выдает сообщение в успешной авторизации при хотя бы одном правильном из пар логин/пароль.. А ругается об введении неверных данных только если оба неправильны... Кто знает, как это так? Чистый php без ajax'a работает четко....
errload вне форума Ответить с цитированием
Старый 18.05.2012, 20:31   #10
errload
Пользователь
 
Регистрация: 11.05.2012
Сообщений: 26
По умолчанию

Исправил, отбой!!!!
errload вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ajax jquery php gunsoy JavaScript, Ajax 17 13.01.2014 14:33
AJAX + PHP mar4elo JavaScript, Ajax 8 12.10.2011 14:24
Нужен совет - PHP+Ajax fioru PHP 13 28.08.2011 12:04
Ajax + include .php файла Linel JavaScript, Ajax 2 12.01.2011 18:31