使用 Ajax 和 JQuery 从 PHP 文件中获取数据

Posted

技术标签:

【中文标题】使用 Ajax 和 JQuery 从 PHP 文件中获取数据【英文标题】:Getting data from PHP file using Ajax and JQuery 【发布时间】:2015-10-23 11:04:58 【问题描述】:

我正在尝试使用成功函数(数据)从我的 php 文件中获取数据

当我使用 console.log(data) 时,我得到了;真/假/存在 但是我不能做一个 if 语句,如果我这样做了就提醒!

这是我的 js 文件

function ajaxCall(username, email, password)

$.ajax(
    type: 'POST',
    url: '../register.php',
    data:   
        'username' : username,
        'email' : email,
        'password' : password,
    ,
    success: function(data) 
     if(data === "exists")
     alert("user exists");
    
);

这是我的 .php 文件

<?php

$servername = "#";
$username = "#";
$password = "#";
$dbname = "#";

$regusername = $_POST['username']; 
$email = $_POST['email']; 
$regpassword = $_POST['password'];   

$mysqli = new mysqli($servername, $username, $password, $dbname);
$selectQuery = "SELECT username FROM users WHERE username = '$regusername'";
$select = $mysqli->query($selectQuery);
// var_dump($select->num_rows);

if( $select->num_rows == 0) 
    $insertQuery = "INSERT INTO users (username, password, email) VALUES ('$regusername','$regpassword','$email');";
    $insert = $mysqli->query($insertQuery);

        if( $insert == true) 
            echo "true";
        else 
            echo "false";
        
else 
    echo "exists";


?>

【问题讨论】:

感谢大家的帮助,非常感谢。 ($.trim(data) 完成了这项工作。但将使用更正确的结构化数据格式。无论如何,这是我在 *** 上的第一篇文章,你们帮助这里的人很棒。这可能不会是我在这里的最后一篇文章;-) 现在谢谢! 【参考方案1】:

使用结构合理的数据格式,例如 json:

php:

$data=['exists'=>false];
if( $select->num_rows == 0) 
    $insertQuery = "INSERT INTO users (username, password, email) VALUES ('$regusername','$regpassword','$email');";
    $data['inserted'] = (bool) $mysqli->query($insertQuery);
else 
    $data['exists']=true;

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

JS

$.ajax(
    type: 'POST',
    url: '../register.php',
    data:   
        'username' : username,
        'email' : email,
        'password' : password,
    ,
    success: function(data) 
       if(data.exists)
           alert("user exists");
       elseif(data.inserted)
           alert("inserted");
       else
           alert("did not insert");
       
);

【讨论】:

@charlietfl 回答有效!但是我应该像你那样重建我的代码吗? @JonasAlvarson 这完全取决于您 - 但是,如果您想将多个变量发送回 javascript,那么 json 就是一种方式,所以您不妨养成这个习惯。 @JonasAlvarson 我会使用 json。从长远来看,您会发现它会更好,因为您可能会决定稍后添加其他信息,并且添加另一个属性很简单【参考方案2】:

响应中可能有额外的空格

试试:

if($.trim(data) === "exists")

【讨论】:

if($.trim(data) 就像一个魅力!但我应该像@steve 那样重建我的代码吗?【参考方案3】:

我认为最好使用 404 或 403 (https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) 之类的 HTTP 状态代码,而不是重新调整字符串。这可以通过 PHP (http://php.net/manual/de/function.http-response-code.php) 完成,并使用您的 ajax 调用的错误回调 (http://api.jquery.com/jquery.ajax/ --> StatusCode)

【讨论】:

【参考方案4】:

你没有对前面的答案做出回应,你只是在你的 php 处理程序中回显“存在”这个词。 尝试使用json_encode,因为dataType默认是“json”而不是“html

让我们说

if($insert)  
 $response['exist_status'] = 'exist' 
else 
 $response['exist_status'] = 'do not exist' 
 
echo json_encode($response);

在你的jquery

success: function(response)  
 if(response.exist_status && response.exist_status == 'exist')   
  alert(1); 
  

【讨论】:

对不起。是的,我有点重写我的代码。谢谢您的帮助。真的很感激! 您可能需要设置适当的内容类型标头,并在适当的情况下使用布尔值而不是字符串。但是 +1 因为这仍然是比回显字符串更好的选择 结合两个答案,你会得到你需要的,不要忘记史蒂夫在他的答案中发布的die()... @MancharyManchaary 刚刚注意到您实际上并没有输出 json - return 在这种情况下不起作用,您需要 echoprint 响应。请为未来的访问者编辑【参考方案5】:
if(data == "exists") instead of  if(data === "exists")

【讨论】:

已经试过了..它没有做这项工作..我错过了什么吗?喜欢 dataType: 'json', 文本将是默认的。您没有返回 json 数据,因此无需编写 json 写console.debug(data);成功并在控制台中调试。 如果我使用 console.debug(data);即使我随机输入我知道数据库中不存在的不同用户/电子邮件和密码,我也会得到“存在”。 @JonasAlvarson 还会检查 data 的长度,由于您看不到空格,它可能不是 6

以上是关于使用 Ajax 和 JQuery 从 PHP 文件中获取数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 ajax、jquery 和 PHP 从数据库更新图像不起作用

使用 jQuery 的 $.ajax( ) 函数从 php 文件中获取 JSON 数据不起作用

使用 jQuery 和 AJAX 的跨域 PHP 调用

使用 Jquery、AJAX 和 PHP 从 MySQL 数据库中检索数据

从 PHP (jQuery/AJAX) 插入 MySQL

如何使用ajax和jquery从php Web服务返回简单文本[重复]