将http响应代码从PHP返回到AJAX

时间:2018-04-02 02:12:50

标签: javascript php ajax

我正在尝试为网站创建一个登录页面。我有一个函数,它使用AJAX向PHP脚本发送请求以检查是否输入了正确的用户名和密码。如果查询返回成功结果,我发送http_response_code(200),否则我发送http_response_code(403) 。但是,登录功能似乎不会返回任何响应状态。答案似乎未定义。在这种情况下,即使输入了正确的密码和用户名,该函数也会为我提供错误密码或用户名的窗口警报。我应该检查什么条件来确定成功函数应该根据http响应代码做什么?是否有其他方法可以根据PHP脚本的作用将条件返回给AJAX?

这是登录功能的代码。

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com......"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:27.1.0'
    implementation 'com.android.support:design:27.1.0'
}

}

这是我的PHP脚本。

function login(){
var username = document.getElementById("username").value;
var password = document.getElementById("password").value;
var dataString = 'username1=' + username + '&password1=' + password;
if (username == '' || login == ''){
    window.alert("Please fill in username or password.");
}
else{
    $.ajax({
        type: "POST",
        url: "login.php",
        data: dataString,
        cache: false,
        crossDomain : true,
        success: function(response) {
            if (response.status == 200) {
                window.location = 'http://localhost/site.html';
            }
            else {
                window.alert("The password or username you have entered is not valid");
            }
        }
    });
}        
return false;

2 个答案:

答案 0 :(得分:1)

当您检查响应并发送get response.status时,您实际上并没有将数组或对象作为响应:

因此,在检查登录时,您可以创建一个包含statusmessagejson_encode()的数组,以便您的javascript代码可以选择并阅读它。

<?php
// fix your query connection - you are currently vulnerable. It does go outside of the scope of your question so I am not going to tackle it here.
if(!empty($row['username']) AND !empty($row['password'])) {
    session_start();
    $_SESSION['username'] = $username2;
    $return = array(
        'status' => 200,
        'message' => "Login Successful."
    );
    http_response_code(200);
}
else{
    $return = array(
        'status' => 403,
        'message' => "Login attempt denied."
    );
    http_response_code(403);
}
print_r(json_encode($return));

现在您可以在AJAX函数中获得响应:

    success: function(response) {
        var data = $.parseJSON(response);
        if (data.status == 200) {
            window.location = 'http://localhost/site.html';
        }
        else {
            window.alert(data.message);
        }
    }

答案 1 :(得分:0)

您在success函数中使用的response参数是来自AJAX调用的返回数据,而不是状态和/或标头。您可以通过获取函数的第二个参数来获取描述状态的字符串:

$.ajax({
  ...
  success: function(data, status){
    if(status == "success"){
      // success code.
    }
  }
});

查看jQuery.ajax docs了解详情。