美元如何?Post知道要返回什么数据


how does $.post know what data to return?

我不确定我是否走错了路,也找不到我想要的东西,所以如果有人能指出我的错误,或者让我知道我是否走错了路,那就太好了。

我正试图使用$.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()根据您发送给urldata返回数据。在你的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}

我倾向于把这些方法结合起来。