Javascript 为什么Node.js函数没有';是否返回JSDom序列化文档结果?
我有一个PHP脚本,它充当DNode客户端。然后是Node.js Dnode服务器,它评估从PHP客户端接收的代码,并将DOM作为HTML返回。然而,Node.js的行为对我来说很奇怪(就像一个Node.js新手)。它不返回任何内容,即使返回的字符串不是空的。我的代码如下: PHP客户端代码使用:Javascript 为什么Node.js函数没有';是否返回JSDom序列化文档结果?,javascript,php,node.js,dnode,Javascript,Php,Node.js,Dnode,我有一个PHP脚本,它充当DNode客户端。然后是Node.js Dnode服务器,它评估从PHP客户端接收的代码,并将DOM作为HTML返回。然而,Node.js的行为对我来说很奇怪(就像一个Node.js新手)。它不返回任何内容,即使返回的字符串不是空的。我的代码如下: PHP客户端代码使用: Node.js服务器代码: var dnode = require('dnode'); var jsdom = require("jsdom"); var server = dnode({ z
Node.js服务器代码:
var dnode = require('dnode');
var jsdom = require("jsdom");
var server = dnode({
zing: function (n, cb) {
var document = jsdom.jsdom('<!DOCTYPE html>');
var window = jsdom.parentWindow;
eval(n);
var html = jsdom.serializeDocument(document);
// console.log(html);
cb(html);
}
});
server.listen(7070);
var dnode=require('dnode');
var jsdom=require(“jsdom”);
var服务器=dnode({
zing:函数(n,cb){
var document=jsdom.jsdom(“”);
var window=jsdom.parentWindow;
eval(n);
var html=jsdom.serializeDocument(文档);
//log(html);
cb(html);
}
});
服务器监听(7070);
Console.log()清楚地输出预期结果。但它永远不会到达PHP客户端。但奇怪的是,如果我改变行cb(html)代码>至cb('test')代码>,PHP输出“测试”。因此,问题一定出在Node.js端的某个地方。但我不知道去哪里找
提前感谢您的提示。您如何查看回复?通过网络浏览器?如果是这样的话,那么您将根据在eval(n)
中计算的内容来更改文档的DOM。。。如果没有任何变化,那么您将不会看到任何东西,因为除了html/head/body
标记之外,您将有一个空DOM。值得花时间确认您得到的是一个空的响应,而不仅仅是一个空的DOM
这就是说,eval
函数具有您想要在上面声明的文档/窗口
上执行它的任何上下文。实际上,它只是在节点本身的上下文中执行,而不是在您试图创建的页面上执行。要解决此问题,请尝试使用:
window.eval(n)
如果看一下创建类似浏览器的窗口对象的示例
在jsdom的Github页面上,这将使您更好地了解如何准确使用此包
上面的内容应该是这样的:
var document = jsdom.jsdom("<!DOCUMENT html>");
var window = document.parentWindow;
window.eval(n);
var html = jsdom.serializeDocument(document);
cb(html);
var document=jsdom.jsdom(“”);
var window=document.parentWindow;
评估(n);
var html=jsdom.serializeDocument(文档);
cb(html);
现在,您将在之前创建的DOM上执行Javascript:-)您的问题不在节点中。当我使用您在问题中显示的服务器代码并尝试使用此客户端代码时,我得到了预期的结果:
var dnode = require("dnode");
var d = dnode();
d.on('remote', function (remote) {
var js = 'var a = document.createElement("A");' +
'document.getElementsByTagName("body")[0].appendChild(a);';
remote.zing(js, function (s) {
console.log(s);
});
});
d.connect('localhost', '7070');
我不做PHP,所以我不知道这方面可能有什么问题
var dnode = require("dnode");
var d = dnode();
d.on('remote', function (remote) {
var js = 'var a = document.createElement("A");' +
'document.getElementsByTagName("body")[0].appendChild(a);';
remote.zing(js, function (s) {
console.log(s);
});
});
d.connect('localhost', '7070');