【问题标题】:How can I retrive data from db with ajax and php?如何使用 ajax 和 php 从 db 中检索数据?
【发布时间】:2015-09-05 05:09:47
【问题描述】:

我正在尝试在提交表单之前检查一个字段是否刚刚出现在数据库中。

所以我将 keyup 事件添加到该字段以从 dbajax 获取数据。

所以我在表单中添加了这段代码:

$(document).ready(function (){
    $("#matricola").keyup(function () {
         $.ajax({
             type:"get",
             url: "getMatricolaAjax.php",
             data: {'type':'user', 'matricola':$("#matricola").val()},
             dataType: "text",
             success: function(result){
                console.log("OK");
                $("#matricola").val("");
                alert("Matricola "+ result +" già presente!!");
             },
             error: function(){
                console.log("KO");
             }
           });
      });
  });

这是我的getMatricolaAjax.php

<script src='js/jquery-2.1.4.js' type="text/javascript"></script>
    <?php
    require_once 'config.php';
    require_once FUNCTION_PATH.'/dbFunction.php';

    if($_GET['type'] == "user"){
        $queryMatricolaMatch = 'select * from user where matricola = "'.$_GET['matricola'].'"';
    }else{
        $queryMatricolaMatch = 'select * from 150ore where matricola = "'.$_GET['matricola'].'"';
    }
    echo $queryMatricolaMatch;
    $conn = dbConnect($USERDB, $PASSWORDDB, $NAMEDB);
    $matricola = dbQueryGetResult($queryMatricolaMatch);
    dbDisconnect($conn);

    echo $matricola;

它适用于一半,因为在result 我从getMatricolaAjax.php 获得所有html 代码..

为什么??

我怎样才能只得到matricola??

【问题讨论】:

  • 我不确定您的 dbQueryGetResult() 函数是如何设置的,但通常查询 mysql 数据库会返回一个数组(您可能认为是“所有 html 代码”)所以如果您想获得特定的结果,匹配时需要指向该数组键
  • 如您所见,result 变量包含您使用 ajax 调用的 php 脚本的输出。如果您需要其他输出,您应该修改您的脚本或制作另一个仅返回您需要的脚本。
  • getMatricolaAjax.php 中不应包含任何输出,例如脚本标签、样式标签。您只需要通过 php 回显。
  • getMatricolaAjax.php 中不需要任何 HTML 标签或 JavaScript 。所以删除它们,然后让我们知道你得到的输出
  • @RNKushwaha 好的!我删除了所有导入和回显。但现在我加载资源失败:服务器响应状态为 500(内部服务器错误),因此 ajax 的响应进入错误而不是成功...为什么?

标签: php jquery html mysql ajax


【解决方案1】:

评论或删除dataType: "text",然后重试。

   $.ajax({
         type:"get",
         url: "getMatricolaAjax.php",
         data: {'type':'user', 'matricola':$("#matricola").val()},
         // dataType: "text", 
         success: function(result){
            console.log("OK");
            $("#matricola").val("");
            alert("Matricola "+ result +" già presente!!");
         },

或者你可以在 PHP 中使用 json_encode() 来获取 JSON 对象数组的数据。

【讨论】:

    【解决方案2】:

    在提交表单之前,您应该使用 POST 检查数据库中的值。

    $(document).ready(function (){
           $("#matricola").keyup(function (e) { 
             var thevalue = $(this).val();
             $.post('getMatricolaAjax.php',{'type':'user','matricola':thevalue}, 
               function(data) { 
                console.log("OK");
                $("#matricola").val("");
                alert("Matricola "+ data +" già presente!!");
               });
             });
          });
    

    还有php文件

    <?php
    require_once 'config.php';
    require_once FUNCTION_PATH.'/dbFunction.php';
    $conn = dbConnect($USERDB, $PASSWORDDB, $NAMEDB);
    
    if($conn->real_escape_string($_POST['type']) == "user"){
        $queryMatricolaMatch = 'select * from user where matricola = "'.$conn->real_escape_string($_POST['matricola']).'"';
    }else{
        $queryMatricolaMatch = 'select * from 150ore where matricola = "'.$conn->real_escape_string($_POST['matricola']).'"';
    }
    
    $matricola = dbQueryGetResult($queryMatricolaMatch);
    dbDisconnect($conn);
    
    echo $matricola;
    

    这应该可以,但我不知道 dbQueryGetResult 应该做什么,所以你也应该发布它。 注意:如果您使用 PDO 编辑删除 'real_escape_string' 函数并使用其他清理方法

    【讨论】:

      猜你喜欢
      • 2017-12-05
      • 1970-01-01
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      • 2012-01-04
      相关资源
      最近更新 更多