2016-02-23 103 views
0

我遇到了一些麻煩,試圖執行ajax調用。它存儲在chat.js(在HTML頭部添加)和它的調用getChatHistory.php獲取響應的問題

chat.js:

function getChatHistory(user1, user2){ 
var response = 'fail'; 
var xmlhttp = new XMLHttpRequest(); 

xmlhttp.onreadystatechange = function() 
{ 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
    { 
     response = response + xmlhttp.responseText; 
    } else { 
     response = "Error:" + hmlhttp.status; 
    } 

    xmlhttp.open('GET', 'getChatHistory.php?user1=' + user1 + '&user2=' + user2); 
    xmlhttp.send(); 
} 
return response;} 

getChatHistory.php:

<?php 
echo "the php talks"; 
?> 

的index.html:

<script> 
(function(){ 
    alert(getChatHistory('user1', 'user2'); 
})() 

我檢查了alert()onreadystatechange事件不起作用。

+0

你是什麼意思它不工作?它不是射擊?打開你的控制檯並檢查錯誤 –

+0

一個問題是你有''hmlhttp.status''而不是'xmlhttp.status'' – Andrew

+0

似乎在index.html中的alert命令中缺少結尾「)」? – Malvolio

回答

2

你不發送請求由於事實,你的。開和功能。發送您是回調裏面,試試這個來代替:

function getChatHistory(user1, user2){ 
    var response = 'fail'; 
    var xmlhttp = new XMLHttpRequest(); 

    xmlhttp.onreadystatechange = function() 
    { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
     { 
      response = response + xmlhttp.responseText; 
     } else { 
      response = "Error:" + hmlhttp.status; 
     } 
    } 

    xmlhttp.open('GET', 'getChatHistory.php?user1=' + user1 + '&user2=' + user2); 
    xmlhttp.send(); 
    return response; 
} 

注意,你也將會遇到由於它是一個異步請求,因此得到response返回的問題。響應將返回undefined,除非您a)使其成爲同步請求(通常是一個糟糕的主意),或者b)在準備就緒狀態完成後,設置要求響應觸發的操作。這裏是你怎麼可以這樣做一個簡單的例子:

function getChatHistory(user1, user2, onComplete){ 
    var response = 'fail'; 
    var xmlhttp = new XMLHttpRequest(); 

    xmlhttp.onreadystatechange = function() 
    { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
     { 
      response = response + xmlhttp.responseText; 
     } else { 
      response = "Error:" + hmlhttp.status; 
     } 

     onComplete(response); 
    } 

    xmlhttp.open('GET', 'getChatHistory.php?user1=' + user1 + '&user2=' + user2); 
    xmlhttp.send(); 
} 

的index.html

<script> 
(function(){ 
    getChatHistory('user1','user2', function(resp){ 
    alert(resp); 
    }); 
})(); 
</script> 
+0

確定的錯誤。將嘗試知道。非常感謝。第一個選項有效,但第二個選項有效......我真的不知道該怎麼做。你能舉一個例子嗎? –

+0

考慮提供一個如何使用'getChatHistory'回調的例子,來說明爲什麼你不應該返回'response'。雖然答案很好。 – Oka

+0

@Oka我會添加一個簡單的例子,謝謝! –