Ajax的小问题。执行错误功能

时间:2019-02-05 21:54:00

标签: javascript php mysql ajax

我对ajax和mysql有一点问题。 我想通过ajax将相同的数据保存到数据库。

Javascript:

$.ajax({
    type : "POST",
    url  : url_save,
    async : false,
    data : { item : nr, var : text },
    success: function(result_save){  
        if (result_save.includes('Error')) { 
          alert("!!!  Error  !!!");
        }
    },
    error: function(xhr, textStatus, errorThrown) {
        alert("!!!  Error  !!!");
    }
});

我的PHP文件看起来像:     PHP:

<?php
    require "config.inc.php";
$db = mysqli_connect(DBHOST, DBUSER, DBPASS, DBNAME) or die ('Error');
$db->set_charset("utf8");
$sql="INSERT INTO tbl (item, var) VALUES ('$_POST[item]','$_POST[var]')";
if (!mysqli_query($db,$sql))
{
    return 'Error';
    die();
}

mysql_close($db);
return 'i.O.';
?>

它保存到数据库,但是每次都会执行ajax的错误功能。怎么了?

1 个答案:

答案 0 :(得分:1)

一些观察结果:

  • jcubic是正确的-您不想使用JS关键字作为参数名称。

  • catcon也正确。 FAR 使用预备语句比直接将变量读取到SQL文本中更可取。

  • 即使mysqli_query()返回0,您仍然要执行mysql_close($ db),不是吗?

  • 您还想知道具体错误,不是吗?

建议:

PHP:

<?php
  require "config.inc.php";
  $conn = new mysqli(DBHOST, DBUSER, DBPASS, DBNAME);
  if ($conn->connect_error) {
     die("Connection failed: " . $conn->connect_error);
  }
  $stmt = $conn->prepare("INSERT INTO tbl (item, var) VALUES (?, ?)");
  $stmt->bind_param("is", $_POST[item_id], $_POST[item_value]);
  if (!$stmt->execute()) {
    $result =  "Execute failed: (" . $stmt->errno . "): " . $stmt->error;
  }
  $stmt->close();
  $conn->close();
  return ($result) ? 'Success' : $result;
  ...

JS:

$.ajax({
    type : "POST",
    url  : url_save,
    async : false,
    data : { item_id: nr, item_value: text },
    success: function(result_save){  
        if (result_save === 'Success') {
          console.log('Insert was successful', nr, value);
        } else {
          alert('mySql Error: ', JSON.stringify(result_save));
        }
    },
    error: function(xhr, textStatus, errorThrown) {
        alert('XHR Exception: ' + textStatus + ', ' + JSON.stringify(errorThrown));
    }
});