Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Ajax发送GET而不是POST_Php_Jquery_Mysql_Post - Fatal编程技术网

Php Ajax发送GET而不是POST

Php Ajax发送GET而不是POST,php,jquery,mysql,post,Php,Jquery,Mysql,Post,我遵循了几乎所有我可以掌握的指南和教程,但我不知道是什么导致了这个问题: 我使用以下代码: function updaterow(){ $.ajax({ url: 'updaterowajax.php', type:'POST', data: 'ID=' + ID + '&SupStatus=' + SupStatus +'&$OrderOthe

我遵循了几乎所有我可以掌握的指南和教程,但我不知道是什么导致了这个问题:

我使用以下代码:

        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+Liten+18+m%E5n&Submit36=Spara

这是我的AJAX脚本所在的文件名。(对我来说)它似乎在向当前页面发送GET,而不是向“updaterowajax.php”发送POST

我做错什么了吗?GET中的所有信息都是正确的,但没有传递

我的服务器的代码或设置有问题吗?默认的Apache、MySQL和jQuery1.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>";}
while($row=mysql\u fetch\u array($query)){
回声“
“$row['ArtName']”
“$row['ArtNumber']”
“$row['CustContact']”
“$row['superalstatus']”
莫塔根
拉格伊科酒店
最佳律师事务所
安科曼
斯卢特福德
内卡德
“$row['superalname']”
“$row['Date']”
“$row['OrderOther']”;}
以及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"

 ?>

问题是因为您正在通过单击submit按钮调用您的
updaterow()
函数,因此表单和AJAX提交一样被提交。您需要将输入类型更改为
按钮

添加
返回false
事件。preventDefault()
将不起作用,因为它只返回仅适用于按钮上事件的值,而不适用于表单提交


另外,最好通过javascript或jQuery附加事件,不要使用
onclick
HTML属性。

这是因为表单仍在提交(在ajax调用之后) 在最后一行中,更改以下内容:

onClick='updaterow()'
为此:

onsubmit='updaterow(); return false;'

正在提交表单和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);
                }
           });
});

实际上,它现在似乎正在发挥作用。我按照建议简单地将“return updaterow()”放在提交按钮上,效果非常好

这么简单的事情,我还是花了很多时间试图找到答案。谢谢!我现在知道以后在哪里问我的问题了

编辑:杰,成功了!大约试了三次。在表单中做了一些更改(我希望它提交更多数据),结果一切都乱了套。所以我把它改回工作时的状态,但现在它不再工作了。。。现在可以用枪了:P


我知道代码是易受攻击的,但它应该只在本地使用,所以我还没有考虑这一部分。

您是否尝试使用
$.post()
而不是
$.ajax
?哎呀,updaterowajax.php的代码没有出现。您的代码易受@PaulNikonowicz
$.post()攻击
只是
$.ajax()
的简写,将
类型设置为
'POST'
。没有区别。关闭,但是
onsubmit
只对
标记有效,而对
submit
按钮无效。@MaxiWheat:我不认为让
updaterow
返回false会停止
submit
事件,因为这是另一个元素上的另一个事件。@MaxiWheat从函数返回false在这个实例中不起作用,因为它是通过按钮而不是表单调用的。@rorymcrossan:实际上,
返回false来自
updaterow
确实有效
onclick
返回false将停止提交按钮(提交表单)的默认操作@马克西维特:我收回这句话,你说得对。(另一方面,他必须将
onclick
更改为
onclick='return updaterow();'
)。只要你在
onclick
属性中添加'return',你就对了,将元素移到表单外部以防止触发提交。我将其更改为:它阻止表单发送到当前页面。但是由于某些原因,表单的内容没有定义。有关解释,请参见我在原始帖子中的编辑。
"<form id='".$row['ID']."' onsubmit='return false;'>"
$("#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);
                }
           });
});