2017-09-25 33 views
-3

我正在爲我工​​作的地方建立時間管理系統。在編寫代碼時,我創建了一個系統,用戶可以配置數據庫詳細信息(如wordpress首次運行安裝),一旦數據成功保存,我想顯示下一步。我有一個不工作的AJAX功能

第一部分是完美的工作,但我遇到了第二部分的問題,系統檢查連接並開始創建數據庫和所需的表。

到目前爲止,我一直在使用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

它顯示'對象[對象]'因爲你返回一個對象!這是完美的預期行爲。因爲你告訴jquery你返回的json,它將json解析爲一個對象。 – Liam

+0

'if(noEmpty && confirm('你確定所有的細節都是真實的嗎?')){ createConfig(); setTimeout(function(){checkResponse();},1000); }' –

+0

我已經閱讀了3次評論,我不知道你想說什麼。這是一個對象,檢查它,看看它包含什麼 – Liam

回答

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); 
} 
+0

謝謝第五次閱讀我設法使功能工作。 – Sand