我一直在用socket學習express,我似乎無法讓我的代碼按照我想要的方式工作。基本上,我正在做一個$ .get調用,它將取代我的索引頁上的HTML。這是在服務器確認添加了新用戶並符合正確要求之後完成的。
$ .get完美地工作,它通過其他文件html。然而套接字事件然後停止工作,我不明白爲什麼。它應該做的是在聊天框旁邊添加用戶名,當某人鍵入某些內容時,它應該反映出來。
這似乎是服務器不喜歡我打電話給不同的文件或沿着這些行的東西?
這是我的GIT的直接鏈接:https://github.com/factordog/letsGuess 因此,如果您需要了解如何設置所有設置,您可以直接進行檢查,但我不確定需要什麼。
這是有問題的代碼:
$.get("./pages/game.html" ,function(data){
console.log(data);
$("#test").html(data);
});
這是實際的客戶端JS:
$(function($) {
// Variables
var socket = io.connect(),// Creates the connection variable
setUsername = $("#setUsername"), //Form for when a user join
newUser = $("#username"), // Input for where user inputs a name
userSuccess = $(".successMessage"), // Success container for valid username
userError = $(".errorMessage"), // Error container for invalid username
playerOne = null,
playerTwo = null;
// Submit function for when a user submits their desired username
setUsername.submit(function(e){
// Prevent sumbit button default
e.preventDefault();
// Gets value of the username. function(data) allows us to reference the app.js
// data which is the array of new users.
socket.emit("new user", newUser.val(), function(data){
// Checks if name is valid else displays an error
if(data) {
socket.on("full_lobby_check", function(data){
console.log(data.lobbyStatus);
});
// Fades out the login page
userSuccess.removeClass("hide");
setTimeout(function(){
$("#loginPage").fadeOut();
}, 1000);
// Create a smoother transition between pages
$.get("./pages/game.html" ,function(data){
console.log(data);
$("#test").html(data);
});
setTimeout(function(){
$('#gamePage').fadeIn();
}, 2000);
} else {
userError.removeClass("hide");
}
});
newUser.val("");
});
// ===============================================
// PLAYER VS PLAYER APPEND
// ===============================================
// Append player names to battle
socket.on("event_new_user", function(data){
playerOne = data.userOne;
playerTwo = data.userTwo;
$(".playerOne").append(playerOne);
$(".playerTwo").append(playerTwo);
});
// ===============================================
// MESSAGE BOX LOGIC
// ===============================================
var users = $(".playersOnline"), // Area to append all users names
messageForm = $(".sendMessage"),
messageBox = $(".message"),
chat = $(".chat");
// Display all the usernames in chat room area
socket.on("usernames", function(data){
var html ="";
for(i=0 ; i < data.length; i++) {
html += data[i] + "<br/>";
}
users.html(html);
});
// On sumbit sends message to server to be fufilled
messageForm.click(function(e){
// Prevent sumbit button default
e.preventDefault();
socket.emit("send message", messageBox.val());
messageBox.val('');
});
// Appends the new message from the user to the chat box
socket.on("new message", function(data){
console.log(data.user);
chat.append("<b>" + data.user + ": </b>" + data.msg + "<br/>");
});
})
;
編輯:
包括了當前引擎收錄:http://pastebin.com/WUzwuPrf
我試圖把我所有的套接字代碼放在一個名爲chatRoom()的函數中,但是當我在$ .get套接字事件後仍然沒有工作時就解僱了它。 –
好吧,我創建了一個pastebin。我現在所做的是創建一個名爲d1的變量。這存儲我的ajax調用,然後加載game.html。然後在我的提交功能下,我檢查通話何時完成,然後執行我的其他功能。只有我現在擁有的問題是如果可能的話我希望它只能在sumbit –
上加載game.html如果你需要在提交後加載game.html,那麼你需要存儲來自套接字的數據.io事件在html加載後全局插入到頁面中,或者更改服務器以延遲發送事件,直到它從加載html文件的瀏覽器中獲得一個ok後。 –