【问题标题】:Little problem with ajax. Error-function is executedajax 的小问题。执行错误函数
【发布时间】:2019-06-29 19:35:36
【问题描述】:

我对 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的错误函数。怎么了?

【问题讨论】:

  • 你可能有问题 var 作为对象中的键,因为它是关键字,尝试'var': text} 这可能会在 IE 中失败,不确定其他浏览器,Chrome 工作正常。
  • 首先检查你得到的错误可能是成功的错误。因为'error'.includes('error') 是真的。
  • 当出现问题时,您只需在 php 和 js 代码中返回单词错误,从而阻止您找出问题所在。记录正确的错误消息,你会更清楚发生了什么。
  • 不,是error的错误:function(xhr, textStatus, errorThrown) { alert("!!! Error !!!"); }。在实际代码中,这是另一条消息。
  • 另外,你的脚本容易被SQL注入,请考虑使用mysqli prepare语句。

标签: javascript php mysql ajax


【解决方案1】:

一些观察:

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

  • catcon 也是正确的。使用准备好的语句优于将变量直接读入 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));
    }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多