【问题标题】:AJAX: How to send back a success/error messageAJAX:如何发回成功/错误消息
【发布时间】:2020-04-28 05:37:20
【问题描述】:

这是我在 Ajax 上迈出的第一步,我已经在苦苦挣扎。我有一个插入数据库的请求,但我的代码目前的行为就像所有请求都成功一样,但我希望能够在更新数据库时处理错误。我想根据 MYSQL 响应来 alert() 一条成功/错误消息。

我的 Ajax 调用:

$("a.bgbtb").click(function(){
  var btnid = $(this).attr("id").split('newbudbtn-')[1]; 
  var newbudget = $("INPUT[id=newbud-"+btnid+"]").val(); 
  var platform = $("span#"+btnid).text(); 
  $.ajax({
    url:"campbdgtedit.php", 
    method:"POST",  
    data:{platform:platform, btnid:btnid, newbudget:newbudget},  
    success:function(data){
        myAlertTop();
    }
  });
});

campbdgtedit.php:

$query = "INSERT INTO campaigns (camp_budget, camp_campaignid) VALUES ('".$_POST['newbudget']."', '".$_POST['btnid']."')";

if ($conn->query($query) === TRUE) {
    echo "Success<br/>";
} else {
    echo "Error: " . $query . "<br>" . $conn->error;
}

如果查询中有错误,我如何捕捉并相应地处理我的警报?我已经尝试了很多我在这里找到的解决方案,但我似乎无法让它们发挥作用。

【问题讨论】:

  • 这是一个非常好的问题,很高兴您正在考虑如何正确处理错误。您使用的是什么数据库扩展; MySQLi、PDO 等?
  • 另外,如果您可以链接到您检查过的其他解决方案并尝试解释它们如何不适合您,那就太好了。这将有助于缩小问题的根源。
  • 我使用的数据库是 MySQLi 和我检查过的解决方案,尽管我试图让它们适用于我的情况,它们有不同的目标和不同的代码,我只是复制/粘贴希望它可能会奏效,但我不了解事情是如何运作的,我注定要失败。
  • success:function(data){ console.log(data) } data是从php/db返回的信息

标签: php ajax mysqli


【解决方案1】:

我建议从您的 PHP 代码中返回 JSON,如果您在 ajax 调用中使用 dataType: 'json',这可以直接解释为 JavaScript 中的对象。例如:

if ($conn->query($query) === TRUE) {
    echo json_encode(array('success' => true));
} else {
    echo json_encode(array('success' => false, 
                           'message' => "Error: Insert query failed"
                           )
                     );
}

请注意,通常将查询详细信息和连接错误传回给最终用户是不安全的,最好传回通用消息并将实际错误记录到文件或其他位置。

在你的 JavaScript 中:

$("a.bgbtb").click(function(){
  var btnid = $(this).attr("id").split('newbudbtn-')[1]; 
  var newbudget = $("INPUT[id=newbud-"+btnid+"]").val(); 
  var platform = $("span#"+btnid).text(); 
  $.ajax({
    url:"campbdgtedit.php", 
    method:"POST",  
    data:{platform:platform, btnid:btnid, newbudget:newbudget},  
    dataType: 'json',
    success:function(data){
        if (data.success) {
            // all good!
            myAlertTop();
        }
        else {
            // problems
            alert(data.message);
        }
    }
  });
});

【讨论】:

  • 请不要将$conn-&gt;error 暴露给最终用户。
  • @Dharman 公平地说,我只是复制了 OPs 代码,但你提出了一个好观点。我已对其进行了更改并记录了安全性。
  • 感谢您的帮助。对于那些想要使用上面代码的人,他们必须在访问消息之前解析 jquery。 jQuery.parseJSON(data).message
  • @CreekBarbara 只要您使用dataType: 'json',返回的JSON 应该会自动解析为data 变量(因此它将是一个对象)
  • @CreekBarbara 来自manual:“如果指定了 json,则使用 jQuery.parseJSON 解析响应,然后将其作为对象传递给成功处理程序。”
【解决方案2】:

如果我理解正确,您需要在JS端分析来自php端的“回声”,以提醒相应的错误。

使用此处返回的“数据”:

 success:function(data){
        myAlertTop();
    }

并执行以下操作:

 success:function(data){
        myAlertTop(data);
    }

function myAlertTop(replyfromPHPside)
 {
  if (replyfromPHPside =="abc")
   {
    alert('..');
   }
  else
   {
    ...
   }
 }

【讨论】:

  • 感谢您的回答。我的警报顶部();是我在 MYSQLi 响应成功时触发的函数,如果不是,它应该触发另一个函数。 “abc”是来自 campbdgtedit.php 的回声?
  • 这就是整个目标。 the: myAlertTop 应该同时处理成功和失败。在php方面? => 如果您成功了,请回显“成功”并在 myAlertTop 上进行检查。因此,如果成功,它将调用一个函数,否则,将调用或执行您想要的任何操作。它应该处理所有状态(通过/失败)
  • No myAlertTop 只是成功的响应。这是带有成功消息的叠加显示,
  • ajax:success 即使mysql查询失败也会成功。它指的是ajax的调用,而不是php文件中发生的任何事情,所以你需要根据php文件的回声来分析自己:)
【解决方案3】:

我相信最好的方法是从 PHP 中回显一个 json 字符串并像这样在 javascript 中“捕获”响应:

campbdgtedit.php:

$query = "INSERT INTO campaigns (camp_budget, camp_campaignid) VALUES ('".$_POST['newbudget']."', '".$_POST['btnid']."')";

$arr = array();
if ($conn->query($query) === TRUE) {
    $arr['response'] = true;
} else {
    $arr['response'] = false;
}
echo json_encode($arr);

Javascript:

$("a.bgbtb").click(function(){
  var btnid = $(this).attr("id").split('newbudbtn-')[1]; 
  var newbudget = $("INPUT[id=newbud-"+btnid+"]").val(); 
  var platform = $("span#"+btnid).text(); 
  $.ajax({
    url:"campbdgtedit.php", 
    method:"POST",  
    data:{platform:platform, btnid:btnid, newbudget:newbudget},  
    success:function(data){
        if (data.response == 'true') {
            alert('DB success');
        }
        else {
            alert('DB fail');
        }
    }
  });
});

【讨论】:

    猜你喜欢
    • 2023-04-06
    • 2017-07-26
    • 2012-03-29
    • 2015-04-26
    • 2020-06-11
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多