当我检查我的AJAX请求对index.php的响应时,我得到了我想要的一些数据(一些json,我需要的值为返回值),但同时也加载了HTML,因为index.php类用于调用负责加载一些HTML的视图。

这是响应的前两行:

{"returnVal":"registered"}<!DOCTYPE html>
<html lang="en">


由于我的代码是MVC,因此我不能只创建一个单独的文件来处理AJAX请求,因此我需要一种方法让我的login.js类(生成AJAX请求的地方)遍历整个响应并找到的值我需要的“ returnVal”。您知道我可以做到的方式吗?

Login.js

var loginData, urlPath;

// Allow users to log in or register
function Login() {

    if(!document.getElementById("usernameField")) { // If we have no username field on this page, we are just logging in
        loginData = "email=" + $("#emailField").val() + "&password=" + $("#passwordField").val() + "&action=" + "loggingIn";
        urlPath = "index.php";
    } else { // we are registering
        loginData = "username=" + $("#usernameField").val() + "&email=" + $("#emailField").val() + "&password=" + $("#passwordField").val() + "&action=" + "register";
        urlPath = "../index.php";
    }

    // Send the login/registration data to database
    $(document).ready(function() {
        $.ajax({
            type: "POST",
            url: urlPath,
            data: loginData,
            success: function (result) {
                alert(result); // i need to get the value of 'returnVal' from the response

                if(result.returnVal=="registered") {
                    document.getElementById('notification').innerHTML = "You have been registered";
                } else if (result.returnVal=="username") {
                    document.getElementById('notification').innerHTML = "Username already taken";
                } else if (result.returnVal=="email") {
                    document.getElementById('notification').innerHTML = "Email already taken";
                } else if (result.returnVal=="notRegistered") {
                    document.getElementById('notification').innerHTML = "Please enter registered email";
                } else if (result.returnVal=="loginFail") {
                    document.getElementById('notification').innerHTML = "Please enter correct password";
                } else if (result.returnVal=="loggedIn") {
                    $('#myModal').modal('hide');
                    document.getElementById('loginButton').innerHTML = "Account Settings";
                } else { // Something wrong, tell us
                    //alert(result);
                }
            },
            error: function(xhr, status, error) {
                alert(xhr.responseText);
            }

        })
    })
}


index.php

<?php
    ini_set("log_errors", 1);

    require_once("Model/model.php");
    require_once("Controller/controller.php");
    require_once("View/view.php");

    $model = new Model();
    $view = new View();
    $controller = new Controller($model, $view);

    if(isset($_POST['action'])) {
            if($_POST['action'] == "register") {
                $controller->Register($_POST['username'], $_POST['email'], $_POST['password']);
                echo json_encode($controller->GetReturned());
            }
    }

    $view->Begin();
?>

最佳答案

超简单的方法是在您回显json之后只是exit(),因此视图永远不会发送。如果此控制器从不打算呈现视图,请摆脱$view->Begin();

if(isset($_POST['action'])) {
       if($_POST['action'] == "register") {
             $controller->Register($_POST['username'], $_POST['email'], $_POST['password']);
                echo json_encode($controller->GetReturned());
                exit();
       }
}

10-02 16:56
查看更多