サーバーを呼び出して JSON 文字列を返すスクリプトをセットアップしました。チャット サイトにログインしているユーザー数のカウントを返す呼び出しの目的。ただし、データを送り返すサーバーとデータを受け入れる私のJavaScriptの間のどこかで、データが変更されます。次のロジックを使用してこれを絞り込みました。
- Chrome と Firefox はどちらも完璧に動作します
- Internet Explorer にはありません。
- 各ステップにブレークポイントがある開発者ツールは、返されたデータがスクリプトの開始時点ですでに正しくないことを示しています。
- 論理的に、私は自分の php スクリプトに向かいました。IEから直接呼び出したところ、正しいデータがエコーされました。
期待されるデータ:
{"BestOfLife":0,"Faith":0,"BookLovers":0,"Leather":0,"Debate":0,"Sheets":0,"TheRoom":0,"TheOtherRoom":0,"GayDudes":0,"Religion":0,"Brains":0,"Flames":0,"Arrow":0,"Bow":0,"Main":3}
返されたデータ:
{"BestOfLife":0,"Faith":0,"BookLovers":0,"Leather":0,"Debate":0,"Sheets":0,"TheRoom":0,"TheOtherRoom":0,"GayDudes":0,"Religion":0,"Brains":0,"Flames":0,"Arrow":0,"Bow":0,"Main":2}
最後のキーが異なる番号を保持していることに注意してください。ほとんどのマシン (全国でテスト済み) では、これは常に 2 を返します。私の場合、時々、3が返されます。数値は (ユーザー数に基づいて) 頻繁に変更する必要があります。
これがJavaScriptです:
var userCount = createXmlHttpRequestObject();
function createXmlHttpRequestObject(){
var userCount;
if(window.ActiveXObject){
try{
userCount = new ActiveXObject("Microsoft.XMLHTTP");
}catch(e){
userCount = false;
}
}else{
try{
userCount = new XMLHttpRequest();
}catch(e){
userCount = false;
}
}
if(!userCount){
console.log("Can't Show User Count");
}else{
return userCount;
}
}
function process(){
if(userCount.readyState==0 || userCount.readyState==4){
serverCall = "";
userCount.open("GET", "/src/pfcusercount.php?serverCall=" + serverCall, true);
userCount.onreadystatechange = handleServerResponse;
userCount.send(null);
}else{
setTimeout('process()', 1000);
}
}
function handleServerResponse(){
if(userCount.readyState==4){
if(userCount.status==200){
xmlResponse = userCount.responseXML;
xmlDocumentElement = xmlResponse.documentElement;
jsonString = xmlDocumentElement.firstChild.data;
var roomArray = eval('(' + jsonString + ')');
//set All the room counts
if(roomArray['Main'] == 1){
document.getElementById("userCount").innerHTML = '<span style="color:red">You are the only user online!</span>';
}else{
document.getElementById("userCount").innerHTML = '<span style="color:red">There are ' + roomArray['Main'] + ' users online!</span>';
}
document.getElementById("BestOfLifeC").innerHTML = '<span style="color:red">(' + roomArray['BestOfLife'] + ')</span> BestofLife';
document.getElementById("FaithC").innerHTML = '<span style="color:red">(' + roomArray['Faith'] + ')</span> Faith';
document.getElementById("BookLoversC").innerHTML = '<span style="color:red">(' + roomArray['BookLovers'] + ')</span> BookLovers';
document.getElementById("LeatherC").innerHTML = '<span style="color:red">(' + roomArray['Leather'] + ')</span> Leather';
document.getElementById("DebateC").innerHTML = '<span style="color:red">(' + roomArray['Debate'] + ')</span> Debate';
document.getElementById("SheetsC").innerHTML = '<span style="color:red">(' + roomArray['Sheets'] + ')</span> Sheets';
document.getElementById("TheRoomC").innerHTML = '<span style="color:red">(' + roomArray['TheRoom'] + ')</span> TheRoom';
document.getElementById("TheOtherRoomC").innerHTML = '<span style="color:red">(' + roomArray['TheOtherRoom'] + ')</span> TheOtherRoom';
document.getElementById("GayDudesC").innerHTML = '<span style="color:red">(' + roomArray['GayDudes'] + ')</span> GayDudes';
document.getElementById("ReligionC").innerHTML = '<span style="color:red">(' + roomArray['Religion'] + ')</span> Religion';
document.getElementById("BrainsC").innerHTML = '<span style="color:red">(' + roomArray['Brains'] + ')</span> Brains';
document.getElementById("FlamesC").innerHTML = '<span style="color:red">(' + roomArray['Flames'] + ')</span> Flames';
document.getElementById("ArrowC").innerHTML = '<span style="color:red">(' + roomArray['Arrow'] + ')</span> Arrow';
document.getElementById("BowC").innerHTML = '<span style="color:red">(' + roomArray['Bow'] + ')</span> Bow';
setTimeout('process()', 1000);
}else{
console.log("Unable to show user counts!");
}
}
}
必要に応じてデータをエコーする PHP スクリプトへのリンクを次に示します。
http://www.lgbts-chat.com/src/pfcusercount.php
助けてください :) テスト目的で自由にユーザー アカウントを作成してください。今のところ、デバッグを簡単にするために、登録では電子メールの検証は行われません。必要に応じて偽物を入力してください。