【问题标题】:echo not working for an ajax call which doesn't refresh the pageecho 不适用于不刷新页面的 ajax 调用
【发布时间】:2017-09-24 08:59:00
【问题描述】:

我正在尝试实现一个简单的 javascript 程序,在该程序中我正在对 php 脚本进行 ajax 调用。我确保页面不会自行刷新。所以,现在如果我在 php 中使用 echo 函数,那么它就不起作用了。

    $("#check").on('click',function(){
        //alert("hello");
        var user_name=document.getElementById("user_name").value;
        var pwd=document.getElementById("pwd").value;

        $.ajax({
            url:'checkUser.php',
            type:'POST',
            data:{
                user_name:user_name,
                pwd:pwd
            },
            success:function(){
                alert("hello"); //This section works fine so the php file is getting called
            }
        });

return false;

})

checkUser.php

<?php require 'database.php';
if($conn->connect_error){
    die("Connection failed: " . $conn->connect_error);
}
//Database is getting connected properly
$user_name=$_POST['user_name'];
$password=$_POST['pwd'];
echo("<script>console.log('PHP:');</script>"); //not getting displayed on console
$sql="Select * from login where User_name='$user_name' and Password='$password'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
echo $count; //not getting displayed on console
 ?>

如果我想使用回显功能,那我该怎么做呢?谢谢!

【问题讨论】:

  • 您的代码容易受到SQL injection attacks 的攻击。您应该使用mysqliPDO 准备好的语句和this post 中描述的绑定参数。
  • 停止使用mysql_* 函数。它们自 v5.5(2013 年 6 月)起已被弃用,自 v7.0(2015 年 12 月)起已被删除。而是将mysqli_*PDO 函数与prepared statementsbound parameters 一起使用。
  • 从不存储纯文本密码。您应该改用password_hash()password_verify()。如果您使用的是 5.5 之前的 PHP 版本,请不要使用 MD5 或 SHA1 来散列密码。相反,您可以使用this compatibility pack
  • Woot,必须在一篇文章中使用我所有的简介!
  • &lt;script&gt;console.log('PHP:');&lt;/script&gt; 作为字符串发送回浏览器。 $count; 也返回到同一个字符串中,你没有对返回值做任何事情。

标签: javascript php jquery mysql ajax


【解决方案1】:

您没有通过 success() 函数传递结果。您必须显示页面响应的结果。你可以这样做:

    $("#check").on('click',function(){
        //alert("hello");
        var user_name=document.getElementById("user_name").value;
        var pwd=document.getElementById("pwd").value;

        $.ajax({
            url:'checkUser.php',
            type:'POST',
            data:{
                user_name:user_name,
                pwd:pwd
            },
            success:function(data){
                alert(data); //data will contain the echo value
            }
        });

return false;

})

“数据”变量将始终包含打印在页面上的响应,包括错误,因此请务必考虑是否将其用作验证。

【讨论】:

    【解决方案2】:

    您的 php 文件中的echo 命令基本上会将值返回给 jQuery 的 ajax 函数。但是您没有正确处理响应。

    如何正确使用?

    为 $.ajax 函数的成功事件添加一个参数。 此参数保存从 php 文件返回的值。

        $.ajax({
                    url:'checkUser.php',
                    type:'POST',
                    data:{
                        user_name:user_name,
                        pwd:pwd
                    },
                    success:function(data){
    console.log(data);
                    }
                });
    

    在你的 php 文件中:

    echo "PHP:';
    

    【讨论】:

      【解决方案3】:

      所以你想使用回声,那很好。但是您需要了解的是,它只是将文本输出到仅由 ajax 读取的请求,在您的 ajax.success() 函数中,您需要将它读取的字符串附加到用户正在查看的 DOM 中:

      $.ajax({
              url:'checkUser.php',
              type:'POST',
              data:{
                  user_name:user_name,
                  pwd:pwd
              },
              success:function(data){
                  console.log('data');
                  alert("hello"); //This section works fine so the php file is getting called
              }
          });
      

      还请记住,您正在背靠背呼应 2 件事,因此 ajax 会看到如下内容:

      <script>console.log('PHP:');</script>15
      

      15 是你的$count

      如何将其拆分以进行正确的日志记录取决于您,大多数人使用 json 字符串。

      【讨论】:

        【解决方案4】:

        您将在“成功”回调中收到服务器响应

        success:function(data){
                    alert(data); 
                }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-03-15
          • 2021-08-01
          • 1970-01-01
          • 2020-04-26
          • 1970-01-01
          • 1970-01-01
          • 2014-11-14
          • 2015-12-24
          相关资源
          最近更新 更多