2010-06-22 99 views
1

當我實現聊天功能,我用java腳本來發送文件之間的數據到另一個。 但我面對它的一些問題。XMLHttpRequest問題

代碼:Send.php

<?php 
session_start(); 
$user_id=$_SESSION['user_id']; 
$data=$_POST['data']; 
$message=strip_tags($_POST['message']); 
$message=stripslashes($message); 

include 'connent.php'; 
$MembernameR = mysql_query("select MemberName from members where MemberID = '$user_id'"); 
     $Membername = mysql_fetch_row($MembernameR); 
    $user = $Membername[0]; 
$room_file=file("room1.txt",FILE_IGNORE_NEW_LINES); 

$room_file[]=time()."<[email protected]!>".$user.": ".$message; 
if (count($room_file)>20) 
$room_file=array_slice($room_file,1); 
$file_save=fopen("room1.txt","w+"); 
flock($file_save,LOCK_EX); 
for($line=0;$line<count($room_file);$line++){ 
fputs($file_save,$room_file[$line]."\n"); 
}; 
flock($file_save,LOCK_UN); 
fclose($file_save); 
echo "sentok"; 
exit(); 
?> 

lastReceived=0; 
var xmlhttp; 
// Sign in and Out 
function signInOut(){ 

// Sign in 
if (signInForm.signInButt.name=="signIn"){ 
data="user=" + signInForm.userName.value +"&oper=signin" 

Requst ("POST","users.php",data,checkSignIn) 
return false 
} 
} 
// Sign out 

function singout(){ 

data="user=" + "" +"&oper=signout" 
Requst ("POST","users.php",data,checkSignOut) 

return false;  
} 




// Sign in response 
function checkSignIn(res){ 
if(res=="userexist"){ 
checkSignOut("signout"); 
checkSignIn("signin"); 
return false; 
} 



if(res=="signin"){ 

messageForm.message.focus() 

updateInterval=setInterval("updateInfo()",3000); 
serverRes.innerHTML="Sign in" 
} 
} 

// Sign out response 
function checkSignOut(res){ 
if(res=="usernotfound"){ 
serverRes.innerHTML="Sign out error"; 
res="signout" 
} 
if(res=="signout"){ 
clearInterval(updateInterval) 
serverRes.innerHTML="Sign out" 
return false 
} 
} 

// Update info 
function updateInfo(){ 
serverRes.innerHTML="Updating" 
Requst ("POST","users.php","",showUsers) 
Requst ("POST","receive.php","lastreceived="+lastReceived,showMessages) 
} 

// update online users 
function showUsers(res){ 
usersOnLine.innerHTML=res 
} 

// Update messages view 
function showMessages(res){ 
serverRes.innerHTML="" 
msgTmArr=res.split("<SRVTM>") 
lastReceived=msgTmArr[1] 
messages=document.createElement("span") 
messages.innerHTML=msgTmArr[0] 
chatBox.appendChild(messages) 
chatBox.scrollTop=chatBox.scrollHeight 
} 

// Send message 
function sendMessage(){ 
data="message="+messageForm.message.value+"&user="+signInForm.userName.value 
serverRes.innerHTML="Sending" 
Requst ("POST","send.php",data,sentOk) 

} 

// Sent Ok 
function sentOk(res){ 
if(res=="sentok"){ 
messageForm.message.value="" 
messageForm.message.focus() 
serverRes.innerHTML="Sent" 
} 
else{ 
serverRes.innerHTML="Not sent" 
} 
} 
function Requst (Action,URL,Data,Fun) 
{ 
xmlhttp=new XMLHttpRequest(); 
xmlhttp.onreadystatechange=function(){ 
if (xmlhttp.readyState == 4) 
eval(Fun(xmlhttp.responseText)); 
} 
Data=encodeURI(Data); 
xmlhttp.open(Action,URL,true); 
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
xmlhttp.setRequestHeader("Content-length",Data.length); 
xmlhttp.setRequestHeader("Connection", "close"); 
xmlhttp.send(Data); 


} 

的代碼,我認爲這個問題是在功能 「Requst」 它不工作或在文件中的會話Send.php

你能告訴我我如何解決它? 或者你能告訴我爲什麼上面的代碼不工作嗎? :(

+0

爲什麼地球上不使用類似jQuery的庫來做到這一點?如果你告訴我們什麼實際上不起作用,這將有所幫助 - 「它運作不好」沒有告訴我們什麼。 – ceejayoz 2010-06-22 15:23:56

+0

你有什麼錯誤嗎?是否發送了請求?用Firebug檢查。 – 2010-06-22 15:30:58

+0

問題是什麼? – 2010-06-22 15:33:21

回答

0

試着做下面的腳本中的變化,然後再試一次:

你不需要在Request功能使用eval,只是把它正常

eval(Fun(xmlhttp.responseText)); // no need to eval 

Fun(xmlhttp.responseText); // try this one 

第二件事,爲什麼。你的Connection頭設置爲close
我不認爲你需要設置,只是從你的代碼中刪除以下行。

xmlhttp.setRequestHeader("Connection", "close"); // try removing this line 

希望這有助於!