【问题标题】:My pdo ajax code for search is not working我用于搜索的 pdo ajax 代码不起作用
【发布时间】:2014-09-06 21:13:42
【问题描述】:

我想要做的是:当用户键入他们的电子邮件时,我的 ajax 代码将运行并显示用户在密码输入框中传递。

问题是,当我的 ajax 代码将电子邮件发送到 search.php 时,我的 search.php 没有将数据提供给我的 ajax 以显示。

我认为问题出在我的 search.php 中,因为当我在索引中键入电子邮件后转到 search.php 时,search.php 只是空白,没有显示任何数据。

索引(表格):

email <input type="text" id="query" name="myemail" class="search_textbox" /><br />
Your Password <input type="text" id="mypass" name="mypass" readonly="readonly" /><br />
<script>
$(document).ready(function(){
    $('.search_textbox').on('blur', function(){
                $('#query').change(updateTextboxes);
                updateTextboxes()  
            })
    $('.search_textbox').on('keydown', function(){
                $('#query').change(updateTextboxes); 
                updateTextboxes() 
            })
    $('#query').change(updateTextboxes);

    var  $mypass = $('#mypass');

    function updateTextboxes(){
        $.ajax({
        url:"search.php",
        type:"GET",
        data: { term : $('#query').val() },
        dataType:"JSON",
        success: function(result) {

        var ii = 1;

        for (var i = 0; i < result.length; i++) { 
                    $mypass.val(result[i].value).show().trigger('input');                           
            ii++;
            }

        }


    });


};



});      
</script>

搜索.php

<?php
error_reporting(-1);
ini_set('display_errors', 'On');

$host = "localhost";
$user = "root";
$pass = "";
$db = "test";

$dbc = new PDO("mysql:host=" . $host . ";dbname=" . $db, $user, $pass);
$dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

if (isset($_GET['term'])) {

    $q = $_GET['term'];

    $sql = "SELECT password FROM students WHERE email = :term";
    $query = $dbc->prepare($sql);
    $query->bindParam(':term', $q);
    $results = $query->execute();

    $data = array();

    while ($row = $results->fetch()) {
        $data[] = array(
            'value' => $row['password'] 
        );
    }

    header('Content-type: application/json');
    echo json_encode($data);

}

?>

【问题讨论】:

  • 尝试echo $_GET['term']; 以了解您是否从index.php 获取值。
  • @afaolek 我试过了,它回显了我在索引页面中输入的电子邮件
  • 3 件事first:我会使用POST 而不是GET!,second:在执行后添加print_r($result);第三:做什么你认为一个用户有多少个密码?我想只有一个,所以你真的不需要一个while循环。并且无论如何都不需要while。如果您指定多个结果,请使用$results-&gt;fetchALL()。哦,header('Content-type: application/json'); 不需要
  • @Dwza 我使用 while 来获取所有值并将所有值放入一个数组中,然后将其发送到 ajax 以在用户键入他的注册电子邮件时在输入框中显示密码值。
  • 语句$results = $query-&gt;execute(); 返回一个bool。检查here;

标签: javascript jquery html ajax pdo


【解决方案1】:

我注意到header('Content-type: application/json');。我认为没有必要。删除该行并重试。我不确定,但我认为新页面需要php header。由于您有echo json_encode($data); 并且在您的AJAX 调用中,您已经将返回数据处理为json,因此不需要header(...)

编辑

$q = $_GET['term'];

$sql = "SELECT password FROM students WHERE email = :term";
$query = $dbc->prepare($sql);
$query->bindParam(':term', $q);
if($query->execute() && $query->rowCount()){
    echo json_encode($query->fetch(PDO::FETCH_ASSOC));   
}

脚本

function updateTextboxes(){
    $.ajax({
    url:"search.php",
    type:"GET",
    data: { term : $('#query').val() },
    dataType:"JSON",
    success: function(result) {
        //check here if you have a result, if yes than...
        $("#mypass").val(result.password);
    }
}

【讨论】:

  • 我现在收到此错误“致命错误:在非对象上调用成员函数 fetch()”
  • 我刚刚注意到您在success 回调中没有正确处理json 的结果。稍后,我将更新我的答案以说明这一点。
  • 更好的是,阅读此question
  • 只是想发个帖子,但在我想开始的时候,你做了一个更新:D 如果在 if 中使用$results-&gt;rowCount()direktly 可以保存一行。喜欢:if($result)if ($result-&gt;rowCount())。不知道第一个是否可行,但我认为。
  • 像上面那样指定一个标题从来都不是一件坏事。从技术上讲,为了在语义上正确,我相信你应该在响应中传递一个标题。
猜你喜欢
  • 2015-10-14
  • 2014-10-07
  • 2019-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-05
  • 2015-01-02
  • 1970-01-01
相关资源
最近更新 更多