Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   не работает ajax запрос (https://javascript.ru/forum/jquery/3293-ne-rabotaet-ajax-zapros.html)

ЯРОСЛАВ 04.04.2009 13:10

не работает ajax запрос
 
Здравствуйте. У меня ошибка в коде:
$(".click_button").click(function() {
  	$.ajax({
     url: "log.php?name=" + document.getElementById('input_text').value,
     beforeSend: function(){
       document.getElementById('image').src='Loader.gif';
     },
     success: function(answ){
	$('.some_class').empty();
	$('.some_class').append(answ);
     }
    });
  });

Конкретно: при шелчке на кнопку click_button код посылает запрос используя введеные данные (input_text), а перед отправкой меняет картинку. При успехе удаляет все из div'а some_class и вставляет в него новые данные.
Но у меня этот скрипт работает только первый раз, При втором клике ничего не происходит. Не подскажете как сделать обработку всех нажатий?

x-yuri 05.04.2009 04:07

1) при втором клике ошибки какие-то в консоль выдаются?
2) зачем изменение картинки запихнуто в beforeSend? Почему бы его перед $.ajax не поставить?

Spenser 07.04.2010 16:20

Подобная ситуация
 
Здравствуйте, у меня такая же ситуация как у ТС.

вот код функции:
function DeleteFromCompare(GoodId,SessionId)
{
	if (window.XMLHttpRequest) { 
    req = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
    req = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
        if (req) {
       		var cart = document.getElementById('GoodsInCompare');
       		var cart_box = document.getElementById('COMPARE');
       		var status = document.getElementById('addcart_status');
        	var params = 'good=' + GoodId + '&session=' + SessionId + '&action=delete'; 
        	var url = "/modules/compare/m_box_compare.php"; 
        	req.onreadystatechange = function() {  
 
			if (req.readyState == 4) { 
				status.innerHTML = '';
				if(req.status == 200) {
					cart_box.style.display="block";
					cart.innerHTML = req.responseText;
				}
			}
			}
		}
		
        req.open("POST", url, true); 
        req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
        req.setRequestHeader('Content-length', params.length); 
        req.send(params);
}


Подскажите почему так получается и как это исправить?

x-yuri 07.04.2010 16:40

видимо, кэширование
http://xmlhttprequest.ru/#problem

Spenser 07.04.2010 17:01

Сделал так (строка 29):
function DeleteFromCompare(GoodId,SessionId)
{
	if (window.XMLHttpRequest) { 
    req = new XMLHttpRequest(); 
    } else if (window.ActiveXObject) { 
    req = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
        if (req) {
       		var cart = document.getElementById('GoodsInCompare');
       		var cart_box = document.getElementById('COMPARE');
       		var status = document.getElementById('addcart_status');
        	var params = 'good=' + GoodId + '&session=' + SessionId + '&action=delete'; 
        	var url = "/modules/compare/m_box_compare.php"; 
        	req.onreadystatechange = function() {  
 
			if (req.readyState == 4) { 
				status.innerHTML = '';
				if(req.status == 200) {
					cart_box.style.display="block";
					cart.innerHTML = req.responseText;
				}
			}
			}
		}
		
        req.open("POST", url, true); 
        req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
        req.setRequestHeader('Content-length', params.length);
        req.setRequestHeader ( "Cache-Control", "No-Cache");
        req.send(params);
}

все равно не помогло. как еще можно попробовать? если можно применительно к моему случаю. что то я никак не разберусь с аяксом:(

x-yuri 07.04.2010 20:07

молодец, отправил серверный заголовок с клиента, пойди возьми печеньку. Может будем думать, перед тем как что-то делать? Что значит применительно к твоему случаю? Взять твой код и исправить, чтобы он заработал?

какие заголовки отправляет браузер и сервер в первый и во второй раз (если во второй раз что-то отправляется)? В каком браузере? Версия?

Spenser 07.04.2010 21:09

Если не сложно подскажи как посмотреть заголовки? браузеры опера 10 и ИЕ 8. я первый раз столкнулся с подобной проблемой потому как только начал изучать аякс. помоги плиз.

Spenser 07.04.2010 22:05

С заголовками разобрался. тут вот какая ситуация.
После первой отработки скрипта аякс, просматриваю хтмл код и там нет фрагмента кода который должен отработать второй раз. т.е.
т.е. изначально код хтмл:
<table border="0" cellspacing="0" cellpadding="0" class="box"  id="COMPARE">
<tr>
	<td class="box_head">Сравнение</td>
</tr>
<tr>
	<td class="box_body">
	<div id="GoodsInCompare"><div class="MCart_good">Товар 1
                        <a title="Удалить" class="delete" onclick="DeleteFromCompare(1076,'6d9f147b665cd2d87a8797c745c54a70')">&times;</a></div><div class="MCart_good">Товар 2
                        <a title="Удалить" class="delete" onclick="DeleteFromCompare(1068,'6d9f147b665cd2d87a8797c745c54a70')">&times;</a></div></div>
	<input type="button" value="Сравнить" class="MCompare_btn_compare" onclick="location.href='/compare/'" />
	</td>
</tr>
</table>

после первой отработки код просматриваю, он тот же самый. почему он не обновился? и должен ли был?

Spenser 07.04.2010 22:24

Все, разобрался. Ошибка была в пхп коде. В любом случае спасибо за помощь:)

x-yuri 07.04.2010 22:31

#GoodsInCompare должен был обновиться, #COMPARE появиться. По поводу заголовков, поставь fiddler

на страничке что-то меняется?
как ты просмотриваешь код? Страница/Просмотр HTML-кода? Там ничего меняться не должно, это код, пришедший с сервера. Поставь ff+firebug, в firebug можно будет смотреть текущий код

UPD: опоздал


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