2014-09-21 50 views
0

我將把我的php網頁與node.js和socket.io集成在一起。 客戶端可以連接到node.js服務器文件,但是socket.emit函數不能從客戶端到服務器或返回。 這裏是我的nodeClient.js文件:集成node.js,socket.io和php網頁

var socket = io.connect('http://192.168.0.10:8080/index3.php'); 

$("#messageForm").submit(function() { 
    var nameVal = $("#nameInput").val(); 
    var msg = $("#messageInput").val(); 

socket.emit('message', { name: nameVal, message: msg }); 

// Ajax call for saving datas 
$.ajax({ 
    url: "./ajax/insertNewMessage.php", 
    type: "POST", 
    data: { name: nameVal, message: msg }, 
    success: function(data) { 
    } 
}); 

return false; 
}); 

socket.on('new message', function(data) { 
    var actualContent = $("#messages").html(); 
    var newMsgContent = '<li> <strong>' + data.name + '</strong> : ' + data.message + '</li>'; 
    var content = newMsgContent + actualContent; 

    $("#messages").append(newMsgContent); 
}); 

這裏是nodeServer.js文件:

var socket = require('socket.io'); 
var express = require('express'); 
var http = require('http'); 

var app = express(); 
var server = http.createServer(app); 
var io = socket.listen(server); 

io.sockets.on('connection', function(client) { 
console.log("New client !"); 

client.on('message', function(data) { 
    console.log('Message received ' + data.name + ":" + data.message); 

    //client.broadcast.emit('message', { name: data.name, message: data.message }); 
    io.sockets.emit('new message', { name: data.name, message: data.message }); 
}); 
}); 

server.listen(8080, function(){ 
    console.log('listening on *:8080'); 
}); 

的Ajax的工作原理將數據存儲在MySQL。每個連接的客戶端都被識別爲「新客戶端!」。但客戶端和服務器之間沒有消息通信。我的代碼中可能存在什麼問題。

回答

0

糾正你的JSON的語法,而不是在客戶端寫的:

socket.emit('message', { name: nameVal, message: msg });

socket.emit('message', { "name": nameVal, "message": msg });

同在服務器端,你居然錯過了雙引號,而寫的值名稱在json對象

+0

我改變了代碼,但沒有工作...... – Ahad 2014-09-22 17:18:26