【问题标题】:How to get responds from php to jquery ajax如何从 php 获得对 jquery ajax 的响应
【发布时间】:2014-08-06 13:42:15
【问题描述】:

您好,我正在尝试将 php 代码中的某些消息回显到我的 ajax。但通常我只会有一条回显消息,但这种情况下我有 2 条。但我不知道如何将每个回显分配给一个 .html()

$("#finish").submit(function(){
    $.ajax({
        type:"GET",
        url:"checkFinish.php",
        data: $("#finishProj").serialize(),
        success: function(data){
            $("#add_sucess").html();
            $("#add_err").html();
        }
    }
});


if(!empty($mile1) && $mile1Pay == 'unPaid'){
        $error = 'Payment Not Completed';
        echo $error;
}
if(!empty($mile2) && $mile2Pay == 'unPaid'){
        $error = 'Payment Not Completed';
        echo $error;
}
if(!empty($mile3) && $mile3Pay == 'unPaid'){
        $error = 'Payment Not Completed';
        echo $error;
}

if(empty($error)){
  $success = "Success";
 echo $success;
}

我希望我的echo $error 进入$("#add_err").html();echo $success 进入$("#add_sucess").html(); 我如何指定它?因为通常如果我只有一件事要回显,我只会$("#add_sucess").html(data);

【问题讨论】:

  • 您需要json 数据类型才能做到这一点。看看this,也搜索一下这个问题。

标签: php jquery ajax echo


【解决方案1】:

我会将一个 JSON 对象返回给我的 ajax。这样我可以更好地划分消息。

JavaScript

$("#finish").submit(function(){
    $.ajax({
        type:"GET",
        url:"checkFinish.php",
        dataType: "JSON",//ajax now expects an JSON object to be returned
        data: $("#finishProj").serialize(),
        success: function(data){  
            //now that data is a JSON object, you can call the properties via data.prop              
            $("#add_sucess").html(data.success);
            $("#add_err").html(data.error);
        }
    }
});

PHP

if(!empty($mile1) && $mile1Pay == 'unPaid'){
        $error = 'Payment Not Completed';
}
if(!empty($mile2) && $mile2Pay == 'unPaid'){
        $error = 'Payment Not Completed';

}
if(!empty($mile3) && $mile3Pay == 'unPaid'){
        $error = 'Payment Not Completed';           
}    
if(empty($error)){
  $success = "Success";   
}

echo json_encode(array("error" => $error, "success" => $success));//json_encode an associative array and echo it back to request

exit();

只要确保你之前定义了$success$error,否则你可能会得到一个错误。

【讨论】:

  • 请在json_encode之后添加exitdie,否则您也可以返回更多的json。
  • 谢谢!我已经添加了。
  • 呃,我试过了,但它没有显示消息
  • 它只显示成功消息而不显示错误消息
  • 如果没有错误信息,data.error 将为空。如果您要强制测试错误,请确保在给它一个值之前定义$error。如果 json_encoded 数组中的 $error 未定义,则可能会产生意外结果
【解决方案2】:

传递 flagsuccess : 1 表示成功,error: 0 表示来自服务器端的错误。 在 ajax 成功时,您可以通过检查 data.res 是 1 还是 0 来识别响应。例如:

在服务器上:

if($id > 0 )  // for success
{
  // do other stuff
  $data['res'] = 1 ; 
}
else// for error
{
  // do other stuff
  $data['res'] = 0 ; 
}
echo $json_encode($data);

在客户端:

success: function(data){
        if(data.res==1)
         {
           $("#add_sucess").html();// add success message
         }
       else
       {
             $("#add_err").html();// add error message
       }

    }

注意:- 不要忘记在您的 Ajax 调用中使用 dataType: "json",

更新:- 如果您成功设置string,则在error message 上设置success message 或错误。所以你用EMPTY检查客户端,比如:

if(data.success_msg != "")
{
$("#add_sucess").html(data.success_msg);// add success message
} 
else
{
$("#add_err").html(data.error_msg);// add error message
}

【讨论】:

  • 你是什么意思传递成功的标志:1?我是否设置 $success = '1'?
  • 是的,类似这样的事情,如果代码运行成功,则传递 1,否则传递 0 并在客户端处理。
  • 我该如何设置呢?因为现在我设置了 $success = 成功消息。
  • 您可以将错误消息设置为错误,因此您可以使用 EMPTY check 检查哪个消息来自服务器,请参阅我的答案的更新部分。
猜你喜欢
  • 2019-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-21
相关资源
最近更新 更多