我不确定我是否走错了路,也找不到我想要的东西,所以如果有人能指出我的错误,或者让我知道我是否走错了路,那就太好了。
我正试图使用$.post('example.php',data1:foo,data2:bar})
将表单数据发布到另一个文件。php页面包含一个INSERT sql查询。
执行此操作后,example.php页面将发布的数据插入到DB中,我如何获得通过/失败/任何返回?
我已经尝试了我在这里和其他网站上看到的各种$.post('..php',{data..},function(data){})
示例,但是成功函数似乎无论如何都会返回,即使INSERT语句中存在明显的问题。
//validate transaction form
$("#frmTransaction").validate({
submitHandler: function(element) {
hidePageMessages();
var invnum = document.frmTransaction.invnum.value;
var recnum = document.frmTransaction.recnum.value;
var status = document.frmTransaction.status.value;
$.post("tran_add.php",
{
invnum:invnum,
recnum:recnum,
status:status
},
function(data){
my_function(data)
}
);
},
rules: {
description: "required",
amount: "required",
account: "required",
category: "required",
payee: "required"
},
errorClass:"errorinline",
validClass:"valid"
});
function my_function(data){
alert(data);
}
因此,如果tran_add.php中的sql语句执行成功,那么并且只有在那时我才希望执行my_function,这将显示为"传递"消息给用户。除了sql语句,tran_add.php还需要做什么吗,比如返回成功之类的?还是说,我是不是走错路了?
提前感谢任何帮助,建议,拍拍周围的头错过一些明显的东西等
您应该这样做,例如:
$mySqlInsertStatement = "insert statement"
If($mySqlInsertStatement) //to check for successful insert
Echo 0
Else
Echo 3
(当然if语句是小写的,等等)
然后在success语句中,你应该说:
If(success == 0)
//success
Else
//not success
$.post()
根据您发送给url
的data
返回数据。在你的tran_add.php
上,你需要这样的条件:
$mysqli->query("INSERT table (column1,column2) VALUES ('value1','value2')");
if($mysqli->affected_rows > 0){
// now return your stuff
echo json_encode(array('test' => 'worked', 'see' => 'now'));
}
要进行测试,您应该更改
function my_function(data){
alert(data);
}
function my_function(data){
// use firebug with console to see object
console.log(data);
}
内部功能。使用$.each();
function(data){
$.each(data,function(key,value){
alert(key+""+value);
});
}
您只需要返回成功的结果,jquery将为您完成其余的工作。
我不是一个真正有经验的专业人士,我不知道幕后发生了什么。在我看来,它是这样的:当php返回一个成功的结果时,jquery/ajax在执行脚本后看到网页上发布了一些东西,并理解该消息意味着成功,并执行其成功函数。如果执行过早停止,没有任何回显,或者执行过早"死亡",或者在else子句中回显错误消息,那么这意味着执行中出现错误,并且成功函数将不会运行。
希望有人能更好地解释幕后发生了什么。
无论如何,事实是,如果你在脚本末尾的if子句中返回类似"执行成功"的消息,只有这样你的js成功函数才会被执行。
我很确定成功函数将被调用,只要有任何响应从服务器不是一个错误(HTTP代码400/404/500/等)。因此,您有两个选项:
1)设置一个错误,如果插入不成功:
<?php
http_response_code(502);
?>
2)让php返回一些数据,成功函数可以解析知道发生了什么(我建议返回json,如果你可以),像:
{"result":"error" "details":"Database Insert failed..."}
或
{"result":"success", "new_id":42}
我倾向于把这些方法结合起来。