正如Brad所说,目前没有办法从ECMAScript非web实现发出http请求,即使在http://www.w3.org/TR/XMLHttpRequest/有工作草案也将XMLHttpRequest集成到这些实现中(我猜通过外部绑定)。
我所做的是建立一个全球性的功能,在网页版这样实现:
function SendBackendRequest(url, parameters, func)
{
var request=new ajaxRequest();
request.onreadystatechange=function() {
if (request.readyState == 4) {
if (request.status == 200 || window.location.href.indexOf("http") ==-1) {
func.call(this, request.responseText);
} else {
func.call(this, "");
}
}
}
request.open("POST", "http://localhost" + url, true);
request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
request.send(parameters);
};
ajaxRequest=function()
{
var activexmodes=["Msxml2.XMLHTTP", "Microsoft.XMLHTTP"];
if (window.ActiveXObject) {
// --- IE
for (var i=0; i<activexmodes.length; i++) {
try {
return new ActiveXObject(activexmodes[i])
}
catch(e) {
//suppress error
}
}
} else
{
if (window.XMLHttpRequest) // --- Mozilla, Safari etc
return new XMLHttpRequest();
else return false;
}
};
在桌面端我只是实现SendBackendRequest(),以及和在我的客户端代码可以使用与后端进行通信的代码相同。
所有你需要做的就是做一个简单的HTTP请求。 – Brad 2014-09-20 02:39:47
如何?据我所知,任何当前的ECMAScript实现都不支持XMLHttpRequest。 – MarkusM 2014-09-20 03:00:01
这不是,为什么它应该是?进行HTTP请求是该框架的一部分,而不是该语言的一部分。这听起来像你正在V8之上构建自己的框架。我不会这么做......你可以使用类似Node.js的东西(就像你已经在你的服务器上使用过的那样),它给你提供了大量的框架。你在最后一个问题中总结了它......是的,你需要用本地代码编写这个代码,然后从你的JS中调用本地代码。或者,使用现有的框架。 – Brad 2014-09-20 13:47:44