我没有工作的AJAX功能

时间:2017-09-25 10:05:24

标签: javascript php jquery ajax

我正在为我工​​作的地方建立一个时间管理系统。编写代码时,我创建了一个用户可以配置数据库详细信息的系统(如wordpress首次运行安装),一旦数据保存成功,我想显示下一步。

第一部分工作正常,但我遇到了第二部分的一些问题,系统检查连接并开始创建数据库和所需的表。

到目前为止,我一直在使用JSON发送和接收PHP响应文本。但现在我想创建一个与AJAX相同的JSON函数。但问题是AJAX函数正在发送数据,但我无法获取响应文本。

当我进行谷歌搜索时,我经历了大部分SO游戏(可能错过了一次),但没有一个能够奏效。当我尝试从alert获取输出时,它会在弹出窗口中显示为 oject [Object]

下面是我的jquery,我将AJAX编码为。

function checkResponse(){
    var res = $('#response').text();
    if(res === "Saved"){
        $.ajax({
           url: './bin/config/createConfig.php',
            type:'get',
            data:{check:'check'},
            dataType:'json',
            complete: function (data) {
                alert(data.responseText);
            }
        });

        // $('#nextstep').show();
        // $('#dbConfig-details').hide();
    }
}

上面的函数由以下setTimeOut调用。

if(noEmpty && confirm('Are you sure all details to be true?')){
            createConfig();
            setTimeout('checkResponse();', 1000);
}

这是上面AJAX向其发送数据的PHP。

if (!empty($_REQUEST["check"])){
    if(file_exists('../iConnect/node.php')){
        $readFile = file_get_contents('../iConnect/node.php');
        $dataTxt = unserialize($readFile);
        extract($dataTxt);

        try{
            $dbConnect = new PDO('mysql:host='.$dbHost.';dbname='.$dbName,$dbUser,$dbPass);
            $dbConnect -> setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            echo "Connected";

        }catch(PDOException $ex){
            echo "ERROR: ".$ex->getMessage();
            exit();
        }
    }else{
        echo "File missing";
    }
}

creatCofig()代码。

function createConfig(){
    var dbUser = document.getElementById("dbUser").value,
        dbPass = document.getElementById("dbPass").value,
        dbName = document.getElementById("dbName").value,
        dbHost = document.getElementById("dbHost").value;

    if(window.XMLHttpRequest){
        xmlhttp=new XMLHttpRequest();
    }else{
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function(){
        if(xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("response").innerHTML=xmlhttp.responseText;
        }
    };
    xmlhttp.open("POST","./bin/config/createConfig.php?dbUser="+dbUser+"&dbPass="+dbPass+"&dbName="+dbName+"&dbHost="+dbHost,true);
    xmlhttp.send();
}

我知道我错过了AJAX的内容,但我的知识仅限于AJAX,有人可以告诉我我做错了什么。

1 个答案:

答案 0 :(得分:1)

complete回调的签名为(jqXHR jqXHR, String textStatus)

在此处阅读here

尝试以下模式:

$.ajax({
    url: ...,
    type: ...,
    data: ...,
    dataType: ...,
}).then(function (data) {
    alert(data.responseText);
});

另外,不要依赖超时来等待ajax响应。这就是承诺的目的。

createConfig()中,使用jQuery.ajax()并按如下方式返回承诺:

function createConfig() {
    return $.ajax({
        'type': 'post',
        'url': './bin/config/createConfig.php',
        'data': {
            'dbUser': $("#dbUser").val(),
            'dbPass': $("#dbPass").val(),
            'dbName': $("#dbName").val(),
            'dbHost': $("#dbHost").val()
        }
    }).then(function(response) {
        $("#response").html(response);
        return response;
    });
}

现在你可以写:

if (noEmpty && confirm('Are you sure all details to be true?')) {
    createConfig().then(checkResponse);
}