Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.05.2011, 17:51
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 19.02.2011
Сообщений: 53

ajax не отрабатывает
Здравствуйте, написал на php переписку пользователей, по какому-то из товаров в магазине, пытаюсь переделать добавление сообщения при помощи ajax
function addOpinion($id) // добавления отзыва
    {
        $this->formOpinion(); //просто форма
        $nm = $_POST['opName'];
        $em = $_POST['opEmail'];
        $txt = $_POST['opText'];
            
?>

<script type="text/javascript">

  function Load()
  {
      var xmlhttp = getXmlHttp();
//кроссбраузерный метод Создания объекта запроса XMLHttpRequest.
//саму функцию не показываю, рабачая, проверял
      var path = "<? echo $_SERVER['PHP_SELF']; ?>";
      xmlhttp.onreadystatechange = function()
      {
          if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
          {
              alert("Ответ сервера: "+xmlhttp.responseText);
          }
      }
      xmlhttp.open('post', path, true);
      xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");//
      xmlhttp.send('proId=' + "<? echo $id; ?>" + '&op');
  }
</script>

<?
//проверка если поля формы пустые и введенный номер соответствует тому что на капче
        if((strcmp($nm,'') > 0) && (strcmp($em,'') > 0) && (strcmp($txt,'') > 0) && !strcmp($_POST["capcha"], $_SESSION['cap']))
        {
            $this->addOp($id, $nm, $em, $txt);//метод добавления в //db+проверка данных
        }
    }

сделал тестовый пример в другую базу с одной таблицей, там все работает, здесь отказывается. я так понимаю методу send, при передаче POSTом передаются параметры для адресной строки или я ошибаюсь? Мне нужно чтобы как ajax отработает в урл было path?proId=$id&op, подскажите, если кто знает.

Последний раз редактировалось DmitryT, 30.05.2011 в 20:07.
Ответить с цитированием
  #2 (permalink)  
Старый 31.05.2011, 16:01
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 19.02.2011
Сообщений: 53

Подскажите пожалуйста как или в какой из функций ajax передать параметры для url.
Ответить с цитированием
  #3 (permalink)  
Старый 31.05.2011, 16:54
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Параметры при методе GET передаются в xmlHttp.open(), а в send() передается null: xmlHttp.send(null);

При методе POST параметры передаются в xmlHttp.send(params)
if (post) // переменная, определяющая метод POST=true
  { 
  xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xmlHttp.send(params);
  }
 else xmlHttp.send(null);

Точно не уверен, но возможно, в Вашей строке
path?proId=$id&op.....
path - лишнее и символ $ тоже не понятно к чему.

Последний раз редактировалось Маэстро, 31.05.2011 в 16:56.
Ответить с цитированием
  #4 (permalink)  
Старый 31.05.2011, 17:04
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 19.02.2011
Сообщений: 53

Маэстро,
так я так и делаю как Вы написали, а то в чем Вы не уверены - это php, а не js. Имя файла и параметры передаются как php вставка.
Ответить с цитированием
  #5 (permalink)  
Старый 31.05.2011, 23:15
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от DmitryT Посмотреть сообщение
так я так и делаю как Вы написали, а то в чем Вы не уверены - это php, а не js. Имя файла и параметры передаются как php вставка.
Понимаете, эта строка не похожа ни на PHP, ни на JS.
xmlhttp.send('proId=' + "<? echo $id; ?>" + '&op');
// вот здесь видно Вашу php-вставку

Чтоб люди не гадали покажите четко, какая строка текста s формируется перед самой отправкой send(s), а не то, что у Вас написано на PHP
var s = 'proId=' + id + '&op' ........
alert(s);
xmlhttp.send(s);
Ответить с цитированием
  #6 (permalink)  
Старый 07.06.2011, 08:28
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 19.02.2011
Сообщений: 53

Маэстро,
вывел alert в функции Load() в блоке
if(xmlhttp.readyState == 4 && xmlhttp.status == 200)
{
    alert(path + strParams);
}

примерно как Вы написали, выводит исходную папку проекта на сервере, index.php и заданные параметры, если alert появился, значит аджакс работает, но в урл почему-то ничего не меняется и соответственно сообщение в базу не приходит.

Последний раз редактировалось DmitryT, 07.06.2011 в 17:29.
Ответить с цитированием
  #7 (permalink)  
Старый 09.06.2011, 12:08
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Я просил не вот это написать
alert(path + strParams);
сюда на форум, а результат работы этой строчки кода! т.е., то что ВЫ видите глазами - написать сюда руками ПОСИМВОЛЬНО, или сделать скриншот увиденного алерта.

т.к. я этого так и не увидел, то продолжаем гадать...
какие данные передаются в POST-запросе?
есть ли там символы коньюнкции & ?
делаете ли Вы encodeURIComponent()?
Ответить с цитированием
  #8 (permalink)  
Старый 09.06.2011, 16:25
Аспирант
Отправить личное сообщение для DmitryT Посмотреть профиль Найти все сообщения от DmitryT
 
Регистрация: 19.02.2011
Сообщений: 53

Маэстро,
почему-то алерт срабатывает через раз или 2 раза,
/diploma/index.php?proId=38&op=1 - это содержимое алерта
?proId=38&op=1 - это строка strParams, она объявлена глабально в функции, по клику на ссылку для появление формы:
function showFormOp(id)
{
    strParams = '?proId='+id+'&op=1';
    var f = document.getElementById('formOp');
    f.style.display = 'block';
}
Ответить с цитированием
  #9 (permalink)  
Старый 09.06.2011, 16:57
х.з
Посмотреть профиль Найти все сообщения от dmitriymar
 
Регистрация: 21.11.2010
Сообщений: 4,588

стоп. если я правильно осмыслил суть этого непонятного кода-аякс запрос шлётся в код какой формирует эту же страницу?смущает одновременное наличие и скрипта и рнр и страница какая и отсылает и обрабатывает одновременно.... а ответ на запрос какой красивый придёт по идее
Ответить с цитированием
  #10 (permalink)  
Старый 09.06.2011, 17:11
Профессор
Отправить личное сообщение для Маэстро Посмотреть профиль Найти все сообщения от Маэстро
 
Регистрация: 02.07.2010
Сообщений: 642

Сообщение от dmitriymar Посмотреть сообщение
стоп. если я правильно осмыслил суть этого непонятного кода-аякс запрос шлётся в код какой формирует эту же страницу?смущает одновременное наличие и скрипта и рнр и страница какая и отсылает и обрабатывает одновременно.... а ответ на запрос какой красивый придёт по идее
Если Вы имели ввиду строчку
xmlhttp.send('proId=' + "<? echo $id; ?>" + '&op');
то это не javascript и не PHP это HTML.
этот HTML лежит внутри php-файла и объявляет javascript-код; но т.к. на сервере исполняется PHP-файл, то в HTML_е разрешаются PHP-вставки, которые приехав в броузер будут выглядеть как значения javascript-переменных...
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
кеширование HTML переданого через ajax BorisBritva jQuery 6 02.04.2011 01:23
Вызов функции печати страницы полученной через AJAX Garik AJAX и COMET 4 02.03.2011 17:05
Ajax разбор метода mycoding jQuery 14 21.05.2010 10:57
Сохранение результата ajax запроса после нажатия 'back' gregOlsen AJAX и COMET 5 18.11.2009 12:23
Объясните как вызывается ajax скрипт AddressBook из формы prog90 AJAX и COMET 3 06.06.2009 16:12