2012-02-17 48 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

而且我知道代码是易受攻击的,但它只能在本地使用,所以我还没有打扰那部分。