Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.12.2008, 10:50
Sharki
 
Сообщений: n/a

jQuery + AJAH
Требуется реализовать добавление комментариев на сайте с помощью AJAH, решил использовать jQuery, написал не большой скрипт , вначале все работало, но когда потребовалось сделать проверку вводимых данных на стороне сервера, возникли проблема, как передать массив от сервера к клиенту? Попробовал использовать JSON, когда начал воплощать это в реальность возникли проблемы. Пытался исправть - не вышло, скрипт вообще не запускается...Помогите, новичку.
Сам скрипт:
function addComment()
{
 form = document.getElementById("com");
 text = form.text.value;
 author = form.author.value;
 ip = form.ip.value;
 img = form.img.value;
 id = form.id.value;
 pr = form.pr.value;
 erdiv = document.getElementById("error_div");
 erdiv.innerHTML = "<p align='center'>Ваш комментарий обрабатывается...</p>";
$.post(
  'test.php',
  {
	text: text,
	author: author,
	ip: ip,
	img: img,
	id: id,
	pr: pr 
  }, Success()  
      );
}
  function Success(data)
{ 
  result = eval(data);
  erdiv.innerHTML = "";
  if (result.err == 'no')
  {
  td = document.createElement("div");
  td.innerHTML = ("<div class='post_div'><p class='post_comment_add'>Автор: <strong>"+result.author+"</strong> <br> Дата: "+result.date+"</p><p>"+result.text+"</p></div>");
  comtab = document.getElementById("comtab");
  comtab.appendChild(td);
  form.text.value = "";
  } 
else 
 { 
erdiv.appendChild(result.log); 
 }
}

Форма с даннымине знаю зачем, но вдруг что нить здесь)
<div id='comtab'></div><div id='error_div'></div>
<p class='post_comment_addes'>Добавить комментарий:</p>
<form method='post' name='comments' id="com">
<p><label>Комментарий: </label><br>
<textarea style='border: 1px solid gray;' onfocus='this.style.background="#fcffc4"' onblur='this.style.background="#ffffff"' name='text' cols='33' rows='6'></textarea></p>
<p>Введите сумму с картинки:<br>
<img class='img_sum' src=<?php echo $myrow2["img"] ?> width='100' height='30'>
<input class='img_area' style='border: 1px solid gray; margin-bottom:5px;' onfocus='this.style.background="#fcffc4"' onblur='this.style.background="#ffffff"' name='pr' type='text' size='9' maxlength='9'></p> 
<input name='id' type='hidden' value='<?php echo $id; ?>'>
<input name='author' type='hidden' value='<?php echo $_COOKIE['pl_login']; ?>'>
<input name='ip' type='hidden' value='<?php $ip=getenv("HTTP_X_FORWARDED_FOR"); if (empty($ip) || $ip=='unknown') {$ip=getenv("REMOTE_ADDR");} echo $ip; ?>'>
<input name='img' type='hidden' value='<?php echo $myrow2["img"]; ?>'>
<p>
<input onMouseOver='this.style.background="#fcffc4"' onMouseOut='this.style.background="#f6f6f6"' style='border:1px solid #CCCCCC;' name='com_add' type='button' value='Добавить'  onClick="addComment(); return false;">
</p>
</form>

Обработчик на стороне сервератоже не знаю зачем, но вдруг)
Код:
<?php
include ("blocks/bd.php");
header("Charset=windows-1251\r\n");
$_POST['author'] = trim($_POST['author']);
$_POST['text'] = trim($_POST['text']);
$_POST['ip'] = trim($_POST['ip']);
$_POST['pr'] = trim($_POST['pr']);
$_POST['author'] = addslashes($_POST['author']);
$_POST['text'] = addslashes($_POST['text']);
$_POST['img'] = addslashes($_POST['img']);
$_POST['ip'] = addslashes($_POST['ip']);
$_POST['pr'] = addslashes($_POST['pr']);
$_POST['author'] = mysql_real_escape_string($_POST['author']);
$_POST['text'] = mysql_real_escape_string($_POST['text']);
$_POST['ip'] = mysql_real_escape_string($_POST['ip']);
$_POST['img'] = mysql_real_escape_string($_POST['img']);
$_POST['pr'] = mysql_real_escape_string($_POST['pr']);

$result = mysql_query ("SELECT sum FROM comment_settings WHERE img='$_POST[img]'",$db);
$myrow = mysql_fetch_array($result);
if ($_POST['pr'] == $myrow["sum"] and preg_match("|^[\d]+$|", $_POST['pr']) and !preg_match("|^[а-яА-Я]+$|", $_POST['text']))
{
$com_date = date("d-m-Y H:i:s");
$result2 = mysql_query ("INSERT INTO comments (post,author,text,date,type,ip) VALUES ('$_POST[id]','$_POST[author]','$_POST[text]','$com_date','les','$_POST[ip]')",$db);
$result3 = mysql_query("SELECT title FROM data WHERE id='$_POST[id]'",$db);
$myrow3 = mysql_fetch_array($result3);
$post_title = $myrow3["title"];
$adress = "photoshop-legend@yandex.ru";
$subject = "Новый комментарий на сайте";
$messege = "Появился комментарий к $post_title \nКомментарий от автора: $_POST[author] \nТекст комментария: $_POST[text] \nСсылка на заметку: http://localhost/blog/lessons.php?id=$_POST[id]";
mail($adress,$subject,$messege,"Content-type:text/plain;Charset=windows-1251\r\n");
$anser = "{ \"err\" : \"no\", \"text\" : \"$_POST[text]\", \"author\" : \"$_POST[author]\", \"date\" : \"$com_date\"}";
}
else 
{
$anser = "{ \"err\" : \"yes\", \"log\" : \"<p align='center' style='font-size:11px; color:#CC0000; margin:0px;'><strong>Ошибка</strong></p><ul style='font-family:Verdana; font-size:12px; border:2px solid #cc0000; padding:10px; margin:30px;'>";
if ($_POST['pr'] != $myrow["sum"] or !preg_match("|^[\d]+$|", $_POST['pr'])) {$anser = $anser."<li><p style='margin:0px;' align='center'>Ввод с изображения не правильный.</p></li>";}
if (preg_match("|^[а-яА-Я]+$|", $_POST['text'])) {$anser = $anser."<li><p style='margin:0px; margin-top:5px;' align='center'>В комментарии нет ни одной русской буквы. Не принимается!</p></li>";}
$anser = $anser."</ul>\"}";
}
echo $anser; ?>

Последний раз редактировалось Андрей Параничев, 12.12.2008 в 20:19. Причина: Пользуйтесь bb-кодами [js] и [html] для оформления листингов кода в теле сообщения.
Ответить с цитированием
  #2 (permalink)  
Старый 12.12.2008, 10:58
Новичок на форуме
Отправить личное сообщение для Anthony Посмотреть профиль Найти все сообщения от Anthony
 
Регистрация: 12.12.2008
Сообщений: 8

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

В конеце функции $.post() нужно вставить ключевое слово "JSON". А в php коде на выходе должен быть массив декодированный: jsonencode($array);
Ответить с цитированием
  #3 (permalink)  
Старый 12.12.2008, 11:33
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от Anthony
Можно попросить оформить код читабельней через спце-теги.
А самому религия не позволяет?
Ответить с цитированием
  #4 (permalink)  
Старый 12.12.2008, 11:42
Новичок на форуме
Отправить личное сообщение для Anthony Посмотреть профиль Найти все сообщения от Anthony
 
Регистрация: 12.12.2008
Сообщений: 8

Есть для этого редактор на сайте - очень удобный.
Ответить с цитированием
  #5 (permalink)  
Старый 12.12.2008, 12:26
Sharki
 
Сообщений: n/a

Сообщение от Anthony Посмотреть сообщение
В конеце функции $.post() нужно вставить ключевое слово "JSON".
Извиняюсь за тупой вопрос, но куда именно его вписать?
Ответить с цитированием
  #6 (permalink)  
Старый 12.12.2008, 18:08
Новичок на форуме
Отправить личное сообщение для Anthony Посмотреть профиль Найти все сообщения от Anthony
 
Регистрация: 12.12.2008
Сообщений: 8

вот про это тут: http://www.linkexchanger.su/2008/34.html

jQuery.post( url, [data], [callback], [type] ) - загружает страницу, используя POST-запрос. Все почти точно так же, как и в предыдущем случае, поэтому даже примеров приводить не буду. Обращу Ваше внимание разве что на еще один опциональный параметр - [type]. В нем можно определить тип передаваемых данных - JSON, XML и т.п.

Вот в type тут надо писать "json". Правда в том случае если вы используете post
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery для загрузки страницы в <div> Dr.Holerik jQuery 12 11.10.2016 17:36
Проблемма с jQuery alextet jQuery 2 09.05.2012 09:31
Что за конструкция? (из jQuery) Yojik Общие вопросы Javascript 6 22.08.2010 14:46
jQuery для начинающих! kalisha jQuery 5 21.11.2008 00:06
первый опыт jquery. Вопросы. Titto jQuery 0 17.09.2008 09:32