【问题标题】:Ajax does not execute success functionAjax 不执行成功函数
【发布时间】:2015-03-18 06:15:08
【问题描述】:

我有一个 jquery ajax 函数,它将表单数据提交到一个 php 文件,在该文件中它检查数据库并返回响应。但是我的成功函数没有被执行,而是通过错误函数返回响应。

以下是我的 login.js 代码:

$(document).ready(function(){
    $("form#loginForm").submit(function() { // loginForm is submitted
        var username = $('#username').attr('value'); // get username
        var password = $('#password').attr('value'); // get password

    if (username && password) { // values are not empty
        $.ajax({
            type: "POST",
            url: "url", // URL of the Php script
            contentType: "application/json; charset=utf-8",
            dataType: "json", //expected from server in response
            // send username and password to the Php script
            data: "username=" + username + "&password=" + password,


            error: function(XMLHttpRequest, textStatus, errorThrown) { // script call was *not* successful
                $('div#loginResult').text("responseText: " + XMLHttpRequest.responseText
                + ", textStatus: " + textStatus
                + ", errorThrown: " + errorThrown);
                $('div#loginResult').addClass("error");
            },

            success: function(data){ //script was successful, data contains response from mysql database
                if (data.error) { // login was not successful
                    $('div#loginResult').text("data.error: " + data.error);
                    $('div#loginResult').addClass("error");
                } // if
                else { // login was successful
                    $('form#loginForm').hide();
                    $('div#loginResult').text("data.success: " + data.success);
                    $('div#loginResult').addClass("success");
                } //else
            } // success
        }); // ajax
    } // if
    else {
        $('div#loginResult').text("enter username and password");
        $('div#loginResult').addClass("error");
    } // else
    $('div#loginResult').fadeIn();
    return false;
});
});

这是我的 Login.php 代码:

 <?php



$username = $_POST["username"];
$password = $_POST["password"];


$dbhost = '*****';
$dbuser = '*****';
$dbpass = '*****';
$conn = mysql_connect($dbhost, $dbuser, $dbpass); // connect to server
if(! $conn )
{
    die('Could not connect: ' . mysql_error());
}

echo 'Connected to database successfully,';

mysql_select_db('sl493',$conn); //pick sl493 database


$result = mysql_query("SELECT *
        FROM metauser
        WHERE metauser.username = '$username'
        AND metauser.password = '$password'") or die(mysql_error()); //select data from metauser table

$row = mysql_fetch_assoc($result);

if($row['username'] == $username) //If username and password not accepted
{$result = 'true login';
 $arr = array('success' => "login is successful");
 echo json_encode($arr);}

else //if username and password are not accepted
{$result = 'login failed';
 $arr = array('error' => "username or password is wrong");
 echo json_encode($arr);}

?>

现在,无论我输入正确还是错误的凭据,我都会收到以下响应:

responseText: 连接数据库成功,{"success":"登录成功"} , textStatus: parsererror, errorThrown: Invalid JSON: 连接数据库成功,{"success":"登录成功"} http://i.imgur.com/n1nZ2ac.jpg

它返回“已成功连接到数据库”,这意味着它成功进入 login.php,但它也返回 responseText,它是 ajax:error 的一部分,由于函数执行成功.HALP,它不应该出现在哪里?

【问题讨论】:

    标签: php jquery ajax ajaxform jquery-ajaxq


    【解决方案1】:

    我想出了什么问题:

    1. 首先我将 ContentType 指定为 json,而我将其作为 字符串所以我不得不改变它。

    2. 第二次我使用 $_POST 的 Is_set andis_empty 函数 确定我得到了 POST 字段。

    3. 最后返回的ajax变量数据由于原因不显示了 按键,所以 data.success 未定义,但 data 返回所有输出 来自 php 文件。

    我仍在试图弄清楚为什么我无法通过密钥访问返回的 JSON。如果您有任何建议,请告诉我,我不会创建另一个问题。以下是工作代码:

    $(document).ready(function(){
        $("form#loginForm").submit(function() {
    
        // loginForm is submitted
            var username = $('#username').attr('value'); // get username
            var password = $('#password').attr('value'); // get password
            console.log(username + password) ;
    
            if (username && password) { // values are not empty
                $.ajax({
                    type: "POST",
                    url: "https://xxx/login.php", // URL of the Php script
                    contentType: "application/x-www-form-urlencoded; charset=utf-8",
    
                    dataType: "application/json", //expected from server in response
                    // send username and password to the Php script
                    //data: "username=" + username + "&password=" + password,
                    data:'username='+ username+'&password='+ password,
    
                    error: function(XMLHttpRequest, textStatus, errorThrown) { // script call was *not* successful
                        $('div#loginResult').text("responseText: " + XMLHttpRequest.responseText
                        + ", textStatus: " + textStatus
                        + ", errorThrown: " + errorThrown);
                        $('div#loginResult').addClass("error");
                    },
    
                    success: function(data){
    
    
                        $('form#loginForm').hide();
                        $('div#loginResult').text("Login: " + data );
                        $('div#loginResult').addClass("success");
                                                                    }
    
    
                });
            }
            else {
                $('div#loginResult').text("enter username and password");
                $('div#loginResult').addClass("error");
            } // else
            $('div#loginResult').fadeIn();
            return false;
        });
    })
    

    ;

    登录.php

    <?php
    
    if (isset($_POST["username"]) && !empty($_POST["username"])) {
        $username = $_POST["username"];}
    
    if (isset($_POST["password"]) && !empty($_POST["password"])) {
        $password = $_POST["password"];}
    
    $dbhost = 'xxx';
    $dbuser = 'xxxxxx';
    $dbpass = 'xxxxxxxx';
    $conn = mysql_connect($dbhost, $dbuser, $dbpass); // connect to server
    if(! $conn )
    {
        die('Could not connect: ' . mysql_error());
    }
    mysql_select_db('sl493',$conn);
    
    $query = mysql_query("SELECT *FROM metauser WHERE metauser.username = '$username'AND metauser.password = '$password'") or die(mysql_error()); //select data from metauser table
    $row = mysql_fetch_assoc($query);
    
    
    if($row['username'] == $username)
    {
            if($row['usertype']== 'student')
                  { $type = 'student'; }
                        else{ $type = 'admin'; }
    
        //$arr = array('result' => 'loginOK', 'usertype' => $type);
    
        $associativeArray = array();
        $associativeArray ['result'] = 'success';
        $associativeArray ['usertype'] = $type;
    
        //$arr = '{"success":"login is successful"}';
        //echo $type;
        echo json_encode($associativeArray); }
    
    
    else
    {$arr = '{"error":"username or password is wrong"}';
        echo json_encode($arr);}
    
    ?>
    

    【讨论】:

      【解决方案2】:

      试试这个:

      var data="";
      data=['username':username,'password':password];//Add this
      
       $.ajax({
                  type: "POST",
                  url: "url", // URL of the Php script
                  contentType: "application/json; charset=utf-8",
                  dataType: "json", //expected from server in response
                  // send username and password to the Php script
                  data: JSON.stringify(data),//Stringify your data while sending
                  success: function(data){ //script was successful, data contains response from mysql database
                      if (data.error) { // login was not successful
                          $('div#loginResult').text("data.error: " + data.error);
                          $('div#loginResult').addClass("error");
                      } // if
                      else { // login was successful
                          $('form#loginForm').hide();
                          $('div#loginResult').text("data.success: " + data.success);
                          $('div#loginResult').addClass("success");
                      } //else
                  },
                  error: function(XMLHttpRequest, textStatus, errorThrown) { // script call was *not* successful
                      $('div#loginResult').text("responseText: " + XMLHttpRequest.responseText
                      + ", textStatus: " + textStatus
                      + ", errorThrown: " + errorThrown);
                      $('div#loginResult').addClass("error");
                  }, // success
              }); // ajax
      

      【讨论】:

      • 它在 data=['username':username,'password':password];//添加这个时抛出 "Uncaught SyntaxError: Unexpected token :"
      • @slk.. 试试这个然后data={'username':username,'password':password};
      • 你现在得到了什么。你能调试一下,看看数据中传递了什么值吗??
      【解决方案3】:

      请将您的 ajax 数据类型从 dataType: "json" 更改为

      datatype: "application/json"
      

      为解决未经授权响应的响应头问题,请在代码的else部分添加响应头为header('HTTP/1.1 401 Unauthorized', true, 401);,如下所示。

      else //if username and password are not accepted
      {$result = 'login failed';
       $arr = array('error' => "username or password is wrong");
      header('HTTP/1.1 401 Unauthorized', true, 401);
       echo json_encode($arr);} 
      

      【讨论】:

      • 还是这样:responseText: 连接数据库成功,["登录成功"] , textStatus: parsererror, errorThrown: Invalid JSON: 连接数据库成功,["登录成功"]跨度>
      • 将 ajax 数据类型从 [dataType: "json"] 更改为 [datatype: "application/json"],它应该会变魔术 :)
      • 唷,它有效,但并不完美。我得到:“data.success:undefined”,同时具有正确和不正确的凭据。这意味着它正在进入成功功能,但无法区分不同的案例。
      • 这是一个不同的问题,可以通过如下设置php响应头来轻松实现。 header('HTTP/1.1 401 未授权', true, 401);
      • 想详细说明一下?我对php没有太多经验。我应该在代码中的哪个位置放置标题。
      猜你喜欢
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      相关资源
      最近更新 更多