我正在为我工作的地方建立一个时间管理系统。编写代码时,我创建了一个用户可以配置数据库详细信息的系统(如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
,有人可以告诉我我做错了什么。
答案 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);
}