Ajax发送GET而不是POST

时间:2012-02-17 15:38:50

标签: php jquery mysql 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而不是向“updaterowajax.php”发送POST。 / p>

我在这里做错了吗? 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:嗯,得到了“阻止形式正常发送”工作(不是很难感谢你),但是firebug告诉我ID没有定义。我发现这很奇怪,因为我没有改变任何东西,从它工作到输入到数据库。但要明确一点:我错过了什么吗?上面的代码实际上应该定义ID的值,对吧?特别是因为当它作为GET发送时,代码似乎没有问题。

5 个答案:

答案 0 :(得分:3)

问题是因为您通过单击提交按钮调用updaterow()函数,因此表单正在提交,因为它通常会以及提交AJAX。您需要将输入的类型更改为button

return false;event.preventDefault()添加到您的函数将无法正常工作,因为它只返回仅适用于按钮上的事件,而不是表单提交。

作为一方,最好通过javascript或jQuery附加您的活动,而不是使用onclick HTML属性。

答案 1 :(得分:0)

那是因为表单正在提交(在你的ajax调用之后) 在最后一行中,更改此内容:

onClick='updaterow()'

到此:

onsubmit='updaterow(); return false;'

答案 2 :(得分:0)

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

这是你的问题。这是一个submit按钮,因此在运行点击处理程序后,它会正常提交表单。

您需要将其更改为<input type='button',或者阻止表单上的提交事件。

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

答案 3 :(得分:0)

正在提交表单以及AJAX请求。

要停止此操作,请将click事件附加到提交按钮:

$("#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);
                }
           });
});

答案 4 :(得分:0)

实际上它似乎现在正在运作。我按照建议简单地在提交按钮上放了“return updaterow()”,它工作得很好!

这么简单,我花了很多年才试图找到答案。非常感谢!我现在知道将来在哪里提出我的问题了!

编辑:周杰伦,它有效!大约三次尝试。在表单中做了一些更改(我希望它提交更多数据),这一切都变得混乱。所以我把它改回原来它工作的时候,但是现在它再也没有用了......现在可以用枪了:P

而且我知道代码很脆弱,但它应该只在本地使用,所以我还没有对这部分感到烦恼。