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函数的code>或事件。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);
}
});
});