Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   ajax post-запрос (https://javascript.ru/forum/jquery/17062-ajax-post-zapros.html)

Raz0r 04.05.2011 17:25

ajax post-запрос
 
подскажите, что не так.
у меня есть форма
<FORM id="myForm" ACTION="index_ajax.php?search=1" METHOD=POST>

обработчик PHP:
<?

	
        if(isset($_REQUEST["search"]))
	{
		$q_str = "SELECT * FROM hotels WHERE ";
		if($_REQUEST[f_name] != "")
			$q_str = $q_str."name LIKE '%".$_REQUEST["f_name"]."%' AND ";
		else
			$q_str = $q_str." 1 AND ";
		
		if($_REQUEST[a_price] != "")
			$q_str = $q_str."price >= ".$_REQUEST["a_price"]." AND ";
		else
			$q_str = $q_str." 1 AND ";
		
		if($_REQUEST[b_price] != "")
			$q_str = $q_str."price <= ".$_REQUEST["b_price"]." AND ";
		else
			$q_str = $q_str." 1 AND ";

			$q_str = $q_str." 1";
		$result = mysql_query($q_str);
	}

ну и собственно ajax
$(document).ready(function() {
		$('#myForm').bind('submit', function(e) {
			e.preventDefault(); // <-- important
			$(this).ajaxSubmit({
			type: 'POST',
			target: 'body',
			cache: false,
			url: 'index_ajax.php',
			data: 'search=1',
			
				
						
				
			});
		});
	});

в этом случае ничего не происходит, если же url оставить как было: index_ajax.php?search=1
то поиск 1 раз срабатывает, после этого затыкается, т.е не реагирует.

walik 04.05.2011 17:37

в data случайно не нужно передавать объект, типа:
data: {search: 1}

?

Raz0r 04.05.2011 17:46

да, спасибо.
уже сам накопал, что так.

но почему после 1 айякс запроса поиск отказывается работать?

Raz0r 05.05.2011 13:29

пробовал сделать с помощью обычного метода ajax, но не знаю как правильно вывести, делал так:
$('#myForm').live('submit', function() {
                        
                        $.ajax({                        
                        
                        url: 'index_ajax.php',
                        data: { search: '1'},
                        success: function(data){$("body").html(data);}                                          
                        });
                        return false;
                });
        });

в этом случае поиск не срабатывает вообще

ART-DELI 05.05.2011 13:39

Что значит не срабатывает? не возвращается ответ или что?

Raz0r 05.05.2011 15:32

Цитата:

Сообщение от ART-DELI (Сообщение 103414)
Что значит не срабатывает? не возвращается ответ или что?

ответ возвращает: 200 ОК
а результата на странице нет, как будто ниче не нажимал

вот ответ(Opera Dragonfly):
Код:

URL:        http://localhost/index_ajax2.php
Метод:        POST
Состояние:        200 OK
Продолжительность:        35 ms

Данные запроса
POST /index_ajax2.php HTTP/1.1
User-Agent: Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.10
Host: localhost
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Encoding: gzip, deflate
Referer: http://localhost/index_ajax2.php
Cookie: PHPSESSID=57d127f36562312fb121c54b8642c784
Connection: Keep-Alive
Content-Length: 8
Content-Type: application/x-www-form-urlencoded
Accept: */*
X-Requested-With: XMLHttpRequest
Content-Transfer-Encoding: binary
Данные ответа
HTTP/1.1 200 OK
Date: Thu, 05 May 2011 11:29:44 GMT
Server: Apache/2.2.17 (Win32) PHP/5.2.17
X-Powered-By: PHP/5.2.17
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 3049
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=windows-1251

может потому что нужно в data передавать значения полей?

UPD: добавил значения полей, поиск стал работать!
но после 1 поиска, снова затыкается, так что проблема была не в методе ajaxSubmit(); абсолютно такое же поведение
где-то что-то не указано. подскажите

ART-DELI 05.05.2011 16:43

Вообще честно говоря не понимаю. Зачем сабметить всю форму если используете Ajax?
//Глобальные установки
$(document).ready(function(){
                    $.ajaxSetup({
                    url: "syte/search.php",
                    type: "POST",
                    dataType: "text"
                    });
                    
                           });

//Клик по кнопке отправить. Обыкновенный div с свойством cursor:pointer;
$('#submit').click(function (){
var senddata='keywords='+$('#idinput').val();
$.ajax({data:senddata,
        success: function (data) {alert(data);}
        
         });

});

И нажимайте сколько хотите раз.

Raz0r 05.05.2011 17:07

Цитата:

Сообщение от ART-DELI (Сообщение 103442)
Вообще честно говоря не понимаю. Зачем сабметить всю форму если используете Ajax?
//Глобальные установки
$(document).ready(function(){
                    $.ajaxSetup({
                    url: "syte/search.php",
                    type: "POST",
                    dataType: "text"
                    });
                    
                           });

//Клик по кнопке отправить. Обыкновенный div с свойством cursor:pointer;
$('#submit').click(function (){
var senddata='keywords='+$('#idinput').val();
$.ajax({data:senddata,
        success: function (data) {alert(data);}
        
         });

});

И нажимайте сколько хотите раз.

полей много, проще serialize() использовать.

заменил событие на click.посмотрел в Opera Dragonfly, что по нажатию запрос отсылается и возвращается с кодом 200, но на странице ниче не меняется так же.

может дело в том что у меня запрос идет к БД MySQL?
т.е данные что должны выводиться на станице через поиск не статические, а берутся из БД

ART-DELI 05.05.2011 17:12

Так а вы что то в браузер выводит? что выводите то и получите в success
print 'Ответ от Ajax запроса';

Raz0r 05.05.2011 17:38

Цитата:

Сообщение от ART-DELI (Сообщение 103444)
Так а вы что то в браузер выводит? что выводите то и получите в success
print 'Ответ от Ajax запроса';

1 (один) раз поиск происходит правильно, все ищет и выводится.
поле этого, сколько не кликай - запросы идут - результат на странице не меняется

ART-DELI 05.05.2011 17:47

Значит так.
1.Ставите FireFox
2. Ставите Addons / Firebug
3. После нажатия на submit в вкладе "Сеть" - POST ответ = смотрите что пришло в ответ.

У вас нечего не меняется, потому что скорее всего нечего не приходит. Да и как первый раз могло пройти если у вас в php нету вывода в браузер ?
Обрабатывается запрос, а результат как выводится? Покажите весь код php

Raz0r 05.05.2011 18:04

Цитата:

Сообщение от ART-DELI (Сообщение 103454)
Значит так.
1.Ставите FireFox
2. Ставите Addons / Firebug
3. После нажатия на submit в вкладе "Сеть" - POST ответ = смотрите что пришло в ответ.

У вас нечего не меняется, потому что скорее всего нечего не приходит. Да и как первый раз могло пройти если у вас в php нету вывода в браузер ?
Обрабатывается запрос, а результат как выводится? Покажите весь код php

я вам привел ответ через OperaDragonfly выше.
URL:	[url]http://localhost/index_ajax2.php[/url]
Метод:	POST
Состояние:	200 OK
Продолжительность:	51 ms

Данные запроса
POST /lab4/lab4/index_ajax2.php HTTP/1.1 
User-Agent: Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.8.131 Version/11.10
Host: localhost
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Encoding: gzip, deflate
Referer: [url]http://localhost/index_ajax2.php[/url]
Cookie: PHPSESSID=57d127f36562312fb121c54b8642c784
Connection: Keep-Alive
Content-Length: 8
Content-Type: application/x-www-form-urlencoded
Accept: */*
X-Requested-With: XMLHttpRequest
Content-Transfer-Encoding: binary
Данные ответа
HTTP/1.1 200 OK 
Date: Thu, 05 May 2011 14:06:10 GMT
Server: Apache/2.2.17 (Win32) PHP/5.2.17
X-Powered-By: PHP/5.2.17
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 3506
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=windows-1251

и как я вам сказал один раз поиск происходит корректно, выводится все как надо.

на каждыц клик кнопки приходит 3 ответа '200 OK': от моей странички index_ajax.php, jquery.min.js, jquery.from.js

внутри содержание ответа совпадает с 'рабочими', ну кроме времени :)

вот весь код:
<?

	
        if(isset($_REQUEST["search"]))
	{
		$q_str = "SELECT * FROM hotels WHERE ";
		if($_REQUEST[f_name] != "")
			$q_str = $q_str."name LIKE '%".$_REQUEST["f_name"]."%' AND ";
		else
			$q_str = $q_str." 1 AND ";
		
		if($_REQUEST[a_price] != "")
			$q_str = $q_str."price >= ".$_REQUEST["a_price"]." AND ";
		else
			$q_str = $q_str." 1 AND ";
		
		if($_REQUEST[b_price] != "")
			$q_str = $q_str."price <= ".$_REQUEST["b_price"]." AND ";
		else
			$q_str = $q_str." 1 AND ";

			$q_str = $q_str." 1";
		$result = mysql_query($q_str);
	}		
	else if(isset($_REQUEST["add"]))
	{
		$result = mysql_query("SELECT name, id, free FROM hotels");
		for($i = 0; $i < mysql_numrows($result); $i++)
		{
			$temp_row = mysql_fetch_array($result);
			if (!isset($_SESSION[$temp_row[name]])) $_SESSION[$temp_row[name]]=0;
			$tb_name = 'g'.$temp_row[id];				// количество элеметов в корзине
			$rg_name = $temp_row[name];
			if($temp_row[free] < $_REQUEST[$tb_name])
				echo '<I>Не достаточно '.$rg_name.', поэтому данный товар не был добавлен в корзину!</I>';
			else if(isset($_REQUEST[$tb_name])) $_SESSION[$rg_name] = $_SESSION[$rg_name] + $_REQUEST[$tb_name];
		}
		$result = mysql_query("SELECT * FROM hotels");
	}
	else
	{
		$result = mysql_query("SELECT * FROM hotels");
	}
	
	echo '<FORM id="myform2" ACTION="index_ajax.php?add=1" METHOD=POST>

		<TABLE id="mytable" BORDER = 2 CELLPADDING=5>
		<TR bgcolor="#F4A460">
			<TD><B>№ товара</B></TD>
			<TD><B>Изображение</B></TD>
			<TD><B>Название отеля</B></TD>
			<TD><B>Класс номера</B></TD>
			<TD><B>Количество мест в номере</B></TD>
			<TD><B>Цена (р.)</B></TD>
			<TD><B>Свободно номеров</B></TD>
			<TD><B>Желаемое количество</B></TD>
		</TR>';
        $color = "white";
	
	for($i = 0; $i < mysql_numrows($result); $i++)
	{
		if($i%2==0) $color = "#FFDFBF";
		else $color = "#FFCC99";
		$temp_row = mysql_fetch_array($result);
		echo '<TR bgcolor='.$color.'>';
			echo '<TD>'."$temp_row[id]".'</TD>';
			echo '<TD><img src='."$temp_row[img]".' alt="X" width=150>';
			echo '<TD>'."$temp_row[name]".'</TD>';
			echo '<TD>'."$temp_row[quallity]".'</TD>';
			echo '<TD>'."$temp_row[place_numb]".'</TD>';
			echo '<TD>'."$temp_row[price]".'</TD>';
			echo '<TD>'."$temp_row[free]".'</TD>';
			echo '<TD><INPUT TYPE=TEXT NAME=g'.$temp_row[id].' VALUE=0></TD>';
		echo '</TR>';	
	}
	
?>

Raz0r 05.05.2011 21:24

нашеееел проблему!
косяк был просто ужасный у меня и не в аяксе или пхп.
форма после 1 запроса 'скрывалась' за таблицу и поэтому повторное ее по id нельзя было использовать, т.е аякс слал запросы без данных формы(поэтому и были видны запросы)
исправил разметку, все прекрасно заработало


Часовой пояс GMT +3, время: 02:43.