AJAX: Как отправить обратно сообщение об успехе / ошибке - PullRequest
0 голосов
/ 28 апреля 2020

Это мой первый шаг ребенка с Ajax, и я уже борюсь. У меня есть запрос, который вставляется в БД, но мой код на данный момент ведет себя как все запросы успешно, но я хочу иметь возможность обрабатывать ошибки при обновлении БД. Я хочу предупредить () сообщение об успехе / ошибке в зависимости от ответа MYSQL.

Мой 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;
}

Как я могу поймать, если в запросе есть ошибка и обработать мои оповещения соответственно? Я перепробовал много решений, которые нашел здесь, но не могу заставить их работать.

Ответы [ 3 ]

1 голос
/ 28 апреля 2020

Я бы порекомендовал вернуть JSON из вашего кода PHP, это можно интерпретировать непосредственно как объект в JavaScript, если вы используете dataType: 'json' при вызове ajax. Например:

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

Обратите внимание, что в целом небезопасно передавать детали запроса и ошибки подключения конечному пользователю, лучше передать сообщение общего характера c и записать фактическую ошибку в файл. или в другом месте.

В вашем 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);
        }
    }
  });
});
1 голос
/ 28 апреля 2020

Если я правильно понимаю, вам нужно проанализировать "эхо" со стороны php на стороне JS, чтобы предупредить соответствующую ошибку.

Используйте возвращаемые "данные" здесь:

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

и выполните следующие действия:

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

function myAlertTop(replyfromPHPside)
 {
  if (replyfromPHPside =="abc")
   {
    alert('..');
   }
  else
   {
    ...
   }
 }
0 голосов
/ 28 апреля 2020

Я считаю, что лучший способ - вывести json -строку из PHP и "перехватить" ответ в 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');
        }
    }
  });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...