2012-02-17 100 views
3

我已經按照幾乎所有指南和教程,我可以把我的手,但我看不出什麼導致這個問題:阿賈克斯發送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 =斯卡+賓達+商Telia + LITEN + 18 + M%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" 

?> 

認爲這是它!

編輯:正如我在我的帖子中進一步提到,我設法讓它工作了一段時間。我使用了建議的方法:onClick ='return updaterow();'它實際上是在工作。三次嘗試。然後我改變了一些代碼,並停止工作。我已經恢復到舊的工作狀態,但唉,不,它不工作了:PI認爲我錯過了一個「或」或什麼的,但到目前爲止我還沒有找到缺失的鏈接如果我找到它,我會報告回來,但是,上面說的方法似乎有效。

編輯2:好吧,得到了「正常發送的防止表單」工作(不是很難感謝你),但螢火蟲告訴我這個ID並沒有被定義,我覺得這很奇怪,因爲我沒有改變任何東西,從它的工作到輸入到數據庫中,但只是要清楚:我錯過了什麼?上面的代碼實際上應該定義值的ID,對嗎?特別是因爲它似乎沒有問題,當它作爲一個GET發送定義它時。

+1

您是否試過使用'$ .post()'而不是'$ .ajax'? – 2012-02-17 15:41:23

+0

糟糕,updaterowajax.php的代碼沒有顯示出來。 – wecsam 2012-02-17 15:41:54

+4

您的代碼是脆弱的[SQL注入](http://stackoverflow.com/a/601524/212159) – Flukey 2012-02-17 15:45:28

回答

3

問題是因爲你打電話喲點擊你的提交按鈕,你會發現功能,因此表格正在提交,因爲它通常會提交以及 AJAX提交。您需要將輸入的類型更改爲button

return false;event.preventDefault()添加到您的函數將不起作用,因爲它只會返回,只適用於按鈕上的事件,而不是表單提交。

作爲一方,最好通過javascript或jQuery附加事件,而不要使用onclickHTML屬性。

+1

或者至少有他updaterow()函數返回false – MaxiWheat 2012-02-17 15:47:23

+0

@MaxiWheat:我不認爲有'updaterow'返回false將停止'submit'事件,因爲這是一個不同的元素在不同的事件。 – 2012-02-17 15:48:26

+0

@MaxiWheat從函數返回false在這個實例中不起作用,因爲它是通過按鈕調用的,而不是窗體。 – 2012-02-17 15:49:28

0

這是因爲形式反正提交(你的Ajax調用之後) 在最後一行,更改此:

onClick='updaterow()' 

這樣:

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

關閉,但'onsubmit'只適用於''

標籤,而不是在'submit'按鈕。 – 2012-02-17 15:47:07

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

這裏是你的問題。這是一個submit按鈕,因此它在運行您的點擊處理程序後正常提交表單。

您需要更改這<input type='button',或阻斷表單的提交事件。

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

我已經改成了這樣的: '[ID ']。 它阻止表單被髮送到當前頁面。但由於某些原因,表單的內容未定義。在原文中查看我的編輯進行解釋。 – 2012-02-24 16:14:16

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 2012-02-20 14:18:18

0

它實際上似乎是現在的工作。我按照建議簡單地把「return updaterow()」放在提交按鈕上,它工作的很好!

這麼簡單的事,仍然我花了年齡試圖找到答案。非常感謝!我現在知道將來在哪裏問我的問題!

編輯:周杰倫,它的工作!大約三次嘗試。對錶單進行了一些更改(我希望它能提交更多數據),而且這一切都變得不合時宜。所以我把它改回到它工作的時候,但現在它不再工作了......現在可以使用槍了:P

而且我知道代碼是易受攻擊的,但它只能在本地使用,所以我還沒有打擾那部分。