Перейти к содержимому

Реферальная программа Мегаплана


  • Закрытая тема Тема закрыта

Ругается при Ajax-запросе.

#1 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0
0

Отправлено 02 Май 2010 - 00:26

У меня есть функция, которая удаляет данные определенной строки таблицы и скрывает эту строку.
Проблема в том, что все работает вроде-бы. Но если привязывать loader этой функцией:

$(function(){
$(".loading").bind("ajaxSend",function(){
$(this).show();
}).bind("ajaxComplete",function(){
$(this).hide();
});
});

то при исполнении функции удаления
function ajax_get_d(form, link, mess, row)
{
var str = $('#'+form).serialize();
$.post("index2.php?"+link, str, function(data){$('#'+mess).html(data);});
document.getElementById(row).style.display = 'none';
}

вот этой ссылкой:
<a href='java script:void(0);' onclick="ajax_get_d('form', 'mod=delete&do=del_polis&id=$id', '', 'pol$id'); return false;">Удалить</a>
иконка Loader появляется, но не исчезает больше, хотя действие и выполнено.
А OPERA выдает вот такую ошибку
Uncaught exception: Syntax error, unrecognized expression: #
Error thrown at line 2904, column 1 in <anonymous function: Sizzle.error>(msg) in [url="http://www.masterwebs.ru/go.php?url=http://pacient1/includes/javascript/jquery.js:"]http://pacient1/includes/javascript/jquery.js:[/url]
throw "Syntax error, unrecognized expression: " + msg;
called from line 2891, column 4 in <anonymous function: Sizzle.filter>(expr, set, inplace, not) in [url="http://www.masterwebs.ru/go.php?url=http://pacient1/includes/javascript/jquery.js:"]http://pacient1/includes/javascript/jquery.js:[/url]
Sizzle.error( expr );
called from line 2705, column 3 in <anonymous function>(selector, context, results, seed) in [url="http://www.masterwebs.ru/go.php?url=http://pacient1/includes/javascript/jquery.js:"]http://pacient1/includes/javascript/jquery.js:[/url]
set = ret.expr ? Sizzle.filter( ret.expr, ret.set ) : ret.set;
called from line 3534, column 3 in <anonymous function: Sizzle>(query, context, extra, seed) in [url="http://www.masterwebs.ru/go.php?url=http://pacient1/includes/javascript/jquery.js:"]http://pacient1/includes/javascript/jquery.js:[/url]
return oldSizzle(query, context, extra, seed);
called from line 3730, column 3 in <anonymous function: find>(selector) in [url="http://www.masterwebs.ru/go.php?url=http://pacient1/includes/javascript/jquery.js:"]http://pacient1/includes/javascript/jquery.js:[/url]
jQuery.find( selector, this[i], ret );
called from line 161, column 4 in <anonymous function: init>(selector, context) in [url="http://www.masterwebs.ru/go.php?url=http://pacient1/includes/javascript/jquery.js:"]http://pacient1/includes/javascript/jquery.js:[/url]
return (context || rootjQuery).find( selector );
called from line 21, column 2 in <anonymous function>(selector, context) in [url="http://www.masterwebs.ru/go.php?url=http://pacient1/includes/javascript/jquery.js:"]http://pacient1/includes/javascript/jquery.js:[/url]
return new jQuery.fn.init( selector, context );
called from line 43, column 91 in <anonymous function>(data) in [url="http://www.masterwebs.ru/go.php?url=http://pacient1/index.php?mod=polis:"]http://pacient1/index.php?mod=polis:[/url]
$('#'+mess).html(data);
called from line 5267, column 4 in success() in [url="http://www.masterwebs.ru/go.php?url=http://pacient1/includes/javascript/jquery.js:"]http://pacient1/includes/javascript/jquery.js:[/url]
s.success.call( callbackContext, data, status, xhr );
called via Function.prototype.call() from line 5207, column 6 in <anonymous function: xhr.onreadystatechange>(isTimeout) in [url="http://www.masterwebs.ru/go.php?url=http://pacient1/includes/javascript/jquery.js:"]http://pacient1/includes/javascript/jquery.js:[/url]
success();

Использую, естественно jQuery 1.4

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 02 Май 2010 - 14:01

gaaarfild,
1) Ты уверен что строка из базу удаляется, а так же ппроверь статус, который возвращает сервер. Скорее всего это не 200 - ОК, возможно у тебя ошибка возникает на стороне сервера. Попробуй вывести с помощью alert, то что приходит от сервера, да и статус не мешало бы. ajaxComplete, вызывется, только при удачном завершении ajax-запроса.
2) Ты не прав в этом куске кода:
function ajax_get_d(form, link, mess, row) 
{
	var str = $('#'+form).serialize();
	$.post("index2.php?"+link, str, function(data){$('#'+mess).html(data);});
	document.getElementById(row).style.display = 'none';
}
У тебя независимо от состояния сервера, которое он вернет, он даже может вернуть ошибку, строка таблицы скроется...
  • 0

#3 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 03 Май 2010 - 01:38

Ну из базы-то он точно удаляет. Это факт. А какая функция возвращает ответ сервера? Или как его проверить.
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 03 Май 2010 - 07:07

gaaarfild, выведи alert'ом переменную data в функции. Ещё назнач http://api.jquery.com/ajaxError/ для проверки на ошибки
Кстати, ошибка в Opera возникает тут:
function(data){$('#'+mess).html(data);}
Ты вместо mess, передаешь пустую строку, а jQuery сообщает об ошибке селектора $('#')
  • 0

#5 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 03 Май 2010 - 22:12

Ну, гипотетически, в данном случае мне ненужно выводить ответ сервера на страницу. Как мне прописать, селектор?
  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 03 Май 2010 - 22:19

gaaarfild, можно оставить третий параметр функции post пустым.
  • 0

#7 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 03 Май 2010 - 22:20

Логишно. =)
  • 0

#8 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 03 Май 2010 - 23:06

Действительно, проблема была в этом.
Достаточно было заменить эту строчку
function(data){$('#'+mess).html(data);}

на эту

function(data){$(mess).html(data);}

И теперь параметр был пустым. И больше данная ошибка не возникала. И лоудер пропадает.
Огромное спасибо.
  • 0

#9 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 04 Май 2010 - 11:56

gaaarfild, всегда пожалуйста. И запомни одна - первая и может даже манусенькая ошибка, может породить что-либо невообразимое.
У тебя jQuery пытался обратиться к несуществующему элементу HTML и занести в него содержимое ответа. Естественно jQuery взбунтовалось, а javascript после первой же синтаксической ошибки пропускает все операторы идущие далее.
  • 0

#10 gaaarfild

gaaarfild
    Topic Starter
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 04 Май 2010 - 14:20

Принял к сведению. На ошибках учимся. =)
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru