我正在运行一个node.js后端和一个基于网络的javascript客户端来发送AJAX请求。
现在,我想使用纯Javascript,即谷歌的V8,做一个小型的桌面版本的javascript客户端。
在这种情况下,如果没有窗口/文档对象,如何为桌面版本启用AJAX支持?在一个完美的世界里,Web和桌面版本会共享相同的代码吗?
或者我是否需要在js代码之外编写AJAX或REST API,即作为本机代码并从js调用它?
发布于 2014-09-21 11:21:15
正如Brad所说,目前还没有办法从ECMAScript的非web实现发出http请求,即使http://www.w3.org/TR/XMLHttpRequest/有一个工作草案来将XMLHttpRequest集成到这些实现中(我猜是通过外部绑定)。
我所做的是创建一个全局函数,并在Web版本中实现它,如下所示:
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(),在我的客户端代码中,可以使用相同的代码与后端进行通信。
https://stackoverflow.com/questions/25944540
复制相似问题