返回纯JS AJAX调用的响应-POST

问题描述 投票:0回答:6

这是我的PHP函数,用于存储一些数据:

case "start_question":

    $user_id = "123";
    $p_id = $_POST[""];
    $question_id = $_POST["question_Id"];
    $answer = $_POST["answer_String"];
    $counter = $_POST["counter"];
    $points = $_POST["answer_Points"];
    $user = new User($uid);
    $user ->end_question($p_id,$user_id,$question_id,$answer,$counter,$points);
    echo "Hello World";
    break;

}

这是JS Ajax调用:

function startQuestion(){

    var question_Id = questions_array[question_counter].question_Id;
    console.log("Start Question",question_Id);
    var ajax = new XMLHttpRequest();
    var params = 'question_Id=' + question_Id;
    ajax.open("POST", "ajax_controller.php?m=start_question", true);
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    ajax.send(params);
    ajax.onreadystatechange = function () {
        console.log(response);
        var response = "";

        if (xmlHttp.readyState == 1) {
            response += "Status 1: Server connection established ! <br/>";
        } else if (xmlHttp.readyState == 2) {
            response += "Status 2: Request recieved ! <br/>";
        } else if (xmlHttp.readyState == 3) {
            response += "Status 3: Processing Request ! <br/>";

        } else if (xmlHttp.readyState == 4) {
            if (xmlHttp.status == 200) {
                var text = xmlHttp.responseText;
                response += "Status 4: Processing Request ! <br/>";
                response += text;
            } else {
                alert("Something is wrong !");
            }
        }
    }
    //If an error occur during the ajax call.
    if (ajax.readyState == 4 && ajax.status == 404) {
        console.log("Error during AJAX call");
    }
}

[我想做的是在PHP完成处理结果后,在控制台上登录” Hello World”响应。

PS:实际上,我想使用参数“ hello world”来触发一个函数,但是如果我想出了如何获取响应,那么这样做很简单。

javascript php ajax
6个回答
3
投票

基本上,它可能只是您没有完全检查过的复制/粘贴中的错字。

您的XMLHttpRequest()对象称为ajax,而不是xmlHttp,因此您从ajax对象而不是xmlHttp中获取responsea和readyState。

此外,在您告诉XMLHttpRequest对象接收到的Respose之后,应该移动ajax.send(params);以使其运行。

function startQuestion(){

    var question_Id = questions_array[question_counter].question_Id;
    console.log("Start Question",question_Id);
    var ajax = new XMLHttpRequest();
    var params = 'question_Id=' + question_Id;
    ajax.open("POST", "ajax_controller.php?m=start_question", true);
    ajax.setRequestHeader("Content-type", "application/x-www-form-urlencoded");

    ajax.onreadystatechange = function () {
        console.log(response);
        var response = "";

        if (ajax.readyState == 1) {
            response += "Status 1: Server connection established ! <br/>";
        } else if (ajax.readyState == 2) {
            response += "Status 2: Request recieved ! <br/>";
        } else if (ajax.readyState == 3) {
            response += "Status 3: Processing Request ! <br/>";

        } else if (ajax.readyState == 4) {
            if (ajax.status == 200) {
                var text = ajax.responseText;
                response += "Status 4: Processing Request ! <br/>";
                response += text;
            } else {
                alert("Something is wrong !");
            }
        }
    }
    //If an error occur during the ajax call.
    if (ajax.readyState == 4 && ajax.status == 404) {
        console.log("Error during AJAX call");
    }


    ajax.send(params);
}

1
投票

不清楚是什么问题...

[xmlHttp.readyState == 4在请求完成后即PHP完成处理您的请求时触发。

如果仅在xmlHttp.readyState == 4中执行操作该怎么办?


1
投票

似乎您的回复文本存储在xmlHttp.responseText中,因此您可以使用:

if (xmlHttp.status == 200) {
    console.log(xmlHttp.responseText);
    /* ... */
}

1
投票
您给定代码中的[[xmlHttp]似乎未定义。尝试将其替换为实际的ajax对象:

if (ajax.readyState == 1){ ... }


0
投票
您应将ajax.send(params);放在ajax.onreadystatechange = function () {/*...*/}之后;

0
投票
如果我理解此权利,则应将console.log(响应)放在实际收到响应的位置,即

var text = xmlHttp.responseText; response += "Status 4: Processing Request ! <br/>"; response += text; /**********************/ console.log(response) /**********************/

© www.soinside.com 2019 - 2024. All rights reserved.