2012-02-17 2 views
3

Я следовал только о каждом руководство и учебник, который я могу заложить мои руки, но я просто не могу видеть, что вызывает эту проблему:Ajax отправить GET вместо POST

Я использую следующий код:

 function updaterow(){ 
      $.ajax({ 
       url: 'updaterowajax.php', 
       type:'POST', 
       data: 'ID=' + ID + '&SupStatus=' + SupStatus +'&$OrderOther=' + OrderOther, 
       success: function(result){ 
        console.log(result); 
        } 
       }); 
     } 

Опубликовать содержимое формы на php-странице. Но по какой-то причине он, похоже, не посылает это как сообщение. И это особенно не отправляет его на правильную страницу.

То, что я в конечном итоге с это в адресной строке:

orderlist.php ID = 36 & SupStatus = 2 & OrderOther = Ska + Binda + Telia + Liteň + 18 + т% E5n. & Submit36 = Spara

Это имя файла, в котором находится мой AJAX-скрипт. Что мне кажется (что для меня важно), это то, что он отправляет GET на текущую страницу вместо POST на «updaterowajax» .php».

Я делаю что-то неправильно здесь? Вся информация в GET верна, но она не передается.

Что-то не так в коде или, возможно, на моем сервере? По умолчанию Apache, MySQL и у меня есть JQuery 1.7.1

Форма, которая должна быть размещена:

 while ($row = mysql_fetch_array($query)) { 
     echo "<tr><form id='".$row['ID']."'> 
        <td class='idcell'><input type='text' name='ID' readonly='readonly' value='".$row['ID']."' /></td> 
        <td>".$row['ArtName']."</td> 
        <td>".$row['ArtNumber']."</td> 
        <td><a href='/singlepost.php?ID=".$row['ID']."' title='Skriv ut ".$row['CustName']."'>".$row['CustName']."</a></td> 
        <td>".$row['CustContact']."</td> 
        <td> 
         <select name='SupStatus'> 
          <option value='".$row['SupStatus']."'>".$row['SupRealStatus']."</option> 
          <option value='01'>Mottagen</option> 
          <option value='02'>Lagd i korg</option> 
          <option value='03'>Beställd</option> 
          <option value='04'>Ankommen</option> 
          <option value='05'>Slutförd</option> 
          <option value='06'>Nekad</option> 
         </select> 
        <td>".$row['SupRealName']."</td> 
        <td>".$row['Date']."</td> 
        <td><textarea name='OrderOther' cols='40' rows='3'>".$row['OrderOther']."</textarea><input type='submit' value='Spara' name='Submit".$row['ID']."' onClick='updaterow()' /></td></form></tr>";} 

И updaterowajax.php

<?php 

    $ID = $_POST['ID']; 
    $OrderOther = $_POST['OrderOther']; 
    $SupStatus = $_POST['SupStatus']; 

    mysql_connect ("localhost", "root", "bilradio388") or die ('Kan inte ansluta till databasen för att: ' . mysql_error()); 
    mysql_select_db ("bil_best"); 

    mysql_query("UPDATE BestTable SET OrderOther = '$OrderOther' WHERE ID = '$ID'"); 
    mysql_query("UPDATE BestTable SET SupStatus = '$SupStatus' WHERE ID = '$ID'"); 

    echo "Dra på trissor" 

?> 

Подумайте, что это он!

EDIT: Как я уже упоминал в своем посте дальше, мне удалось заставить его работать некоторое время. Я использовал предложенный метод: onClick = 'return updaterow();' и он действительно работал. За три попытки. Затем я изменил код, и он перестал работать. Я вернулся к старому рабочему состоянию, но, увы, нет, он больше не работает: П.И. думал, что я пропустил «или» или, или что-то еще, но до сих пор я не нашел недостающую ссылку Я сообщу обратно, если найду его. Однако, как представляется, вышеприведенный метод работает.

EDIT 2: Ну, чтобы «работать нормально», чтобы работать (не так сложно благодаря вам), но firebug сообщает мне, что идентификатор не определен. Я нахожу это странным, так как я ничего не менял, когда он работал для ввода в базу данных. Но просто чтобы быть ясным: я что-то упустил? значение ID, правильно? Тем более, что кажется, что код не имеет проблем с его определением, когда он отправляется как GET.

+1

Вы пытались использовать '$ .post()' вместо '$ .ajax'? –

+0

К сожалению, код для updaterowajax.php не отображался. – wecsam

+4

Ваш код уязвим для [SQL Injection] (http://stackoverflow.com/a/601524/212159) – Flukey

ответ

3

Проблема в том, что вы звоните лет ur updaterow() функция от нажатия кнопки отправки, поэтому форма отправляется, как обычно, , а также подача AJAX. Вам нужно изменить тип ввода на button.

Добавление return false; или event.preventDefault() к вашей функции не будет работать, поскольку оно будет возвращаться только к событию на кнопке, а не в форме отправки.

Как сторона, лучше прикрепить свои события через javascript или jQuery, а не использовать атрибут HTML onclick.

+1

Или, по крайней мере, его функция updaterow() возвращает false – MaxiWheat

+0

@MaxiWheat: Я не думаю, что 'updaterow' return false остановит событие' submit', поскольку это другое событие для другого элемента. –

+0

@MaxiWheat, возвращающий false из функции, не будет работать в этом случае, поскольку он вызывается через кнопку, а не форму. –

0

Это потому, что форма представления в любом случае (после АЯКС вызова) В последней строке изменить:

onClick='updaterow()' 

к этому:

onsubmit='updaterow(); return false;' 
+1

Close, но' onsubmit' работает только с тегом '

', а не на кнопке 'submit'. –

0
"<input type='submit' value='Spara' name='Submit".$row['ID']."' onClick='updaterow()' />" 

Вот ваш вопрос , Это кнопка submit, поэтому она обычно отправляет форму после запуска обработчика кликов.

Вам необходимо либо изменить это на <input type='button', либо заблокировать событие отправки на форме.

"<form id='".$row['ID']."' onsubmit='return false;'>" 
+0

Я изменил его на это: Он блокирует форму отправки на текущую страницу. Однако по какой-то причине содержание формы не определено. См. Мои изменения в исходном сообщении для объяснения. –

0

Форма отправляется, а также запрос AJAX.

Чтобы остановить это, прикрепить событие щелчка на кнопку отправки:

$("#submitButtonId").click(function(event) { 
      // stop the form from submitting 
      event.preventDefault(); 
      $.ajax({ 
       url: 'updaterowajax.php', 
       type:'POST', 
       data: 'ID=' + ID + '&SupStatus=' + SupStatus +'&$OrderOther=' + OrderOther, 
       success: function(result) 
       { 
        console.log(result); 
       } 
      }); 
}); 
+0

Или переместите элемент за пределы формы, чтобы предотвратить его запуск. – Marcin

0

Это на самом деле, кажется, работает. Я последовал совету, чтобы просто поставить «return updaterow()» на кнопку «Отправить», и он отлично работает!

Такая простая вещь, и все же я провел годы, пытаясь найти ответ. Большое спасибо! Теперь я знаю, где задать свои вопросы в будущем!

EDIT: Джей, это сработало! Примерно три попытки. Внесены некоторые изменения в форму (я хотел, чтобы она подавала больше данных), и все это стало неприемлемым. Поэтому я переделал его обратно, когда он работал, но теперь он снова не работает ... Теперь можно использовать ружье: P

И я знаю, что код уязвим, но он должен использоваться только локально, поэтому я еще не беспокоился об этой части.