我的AJAX函数不断出现错误

时间:2020-07-16 16:53:02

标签: javascript php jquery mysql ajax

我是使用AJAX或jQuery的新手,我试图在不加载另一页的表中插入一些数据,我不能。

这是我的AJAX函数: 编辑:

function SumbitAction(act_id) {
$.ajax({
dataType: 'json',
type: "POST",
url: 'Accion.php',
data: {Action:act_id},
success: function (obj, textstatus) {
              if(obj.status==='FAIL') {
                   console.log(obj.message);
              }
              else {
                  console.log("ok");
              }
        }
});
}

在我的PHP中,我目前不提供任何参数来测试完整的null插入查询:编辑:

    $consultaAcciones= "INSERT INTO acciones VALUES (NULL, NULL, NULL, NULL, NULL, NULL, NULL)";
$ejecAcciones = mysqli_query($conn, $consultaAcciones);
if($ejecAcciones===false){
    $response = [
'status' => 'FAIL',
        'message' => 'Accion no registrada correctamente'
    ];
}
else {
    $response = [
        'status' => 'OK',
        'message'=> 'Accion registrada'
    ];
}

header("Content-type: application/json");
echo json_encode($response);

我在控制台日志中收到“错误”,我不知道出了什么问题。编辑:不再

编辑: 现在它不显示任何错误,可以,但是在一切正常时也不会显示我的控制台日志,同时还会收到警告消息:“跨域读取阻止(CORB)阻止了跨域响应” 和一个日志:XHR完成加载:POST“ http:// url ...”。 用这种方式指定我的函数的调用者可能不正确吗?

    function addListener(id,num)
{
  var target= document.getElementById(id);
  if(target){
    target.addEventListener("click",SumbitAction(num),false);

  }
  else{
    //console.log("Nel",id);
  }
}

1 个答案:

答案 0 :(得分:1)

代码中有2个问题。

首先,if(('error')) {的总评估值为true'error'只是一个字符串,即truthy

您可能打算将该字符串与某些内容进行比较(也可以删除双括号):

if (textstatus === 'error') {

接下来,textstatus请求的状态,而不是您的代码的状态。例如,当服务器发出404或500响应时,它将为error。如果您的INSERT失败,则http请求仍然会成功,而textstatus不会是error

如果要添加回调,则可能需要在textstatus回调中检查error()。但是在success()回调中,您可能想检查您的 code 返回的内容。在这种情况下,就是obj

但是查看PHP,它不会返回JS可以使用的任何可预测的内容。如果查询有效,则不返回任何内容。如果失败,它将返回一个以Error开头的字符串,然后显示一个MySQL错误,我们将不知道该错误,因此您无法在JS中对其进行测试。

最好简单地返回一些true / false,OK / fail类型的msg,例如:

// ... rest of your code
$result = mysqli_query($conn, $consultaAcciones);
if ($result === false) {
    echo "FAIL";
} else {
    echo "OK";
}

在您的JS中:

if (obj === 'FAIL') {
// ... etc

如果您实际上想从PHP传回消息,则应该让它回显JSON对象,例如:

$result = mysqli_query($conn, $consultaAcciones);
if ($result === false) {
    $response = [
        'status' => 'FAIL',
        // You shouldn't reveal internal details about errors
        // so don't return mysqli_error().  Maybe log it, and 
        // display something generic to your users.
        'message' => 'There was a problem'
    ];
} else {
    $response = [
        'status' => 'OK',
        'message'=> ''
    ];
}

header("Content-type: application/json");
echo json_encode($response);

在您的JS中:

$.ajax({
    // ...
    // specify we will get a JSON response
    dataType: 'json'
    // ...
    success: function (obj, textstatus) {
        if (obj.status === 'FAIL') {
            alert(obj.message);
        } else {
            // all ok ...
        }
});