我有一个javascript在jetty服务器上执行,它正在向另一台服务器(wamp服务器)上的scoket发送XMLHTTPRequest.请求被发送到套接字,但XHR响应似乎被阻止.
我听说我可以使用JSONP来解决这个问题.
然而,因为我是新手两个javascript我从来没有使用JSONP技术之前我会非常感谢如何使用这种技术的任何帮助?
function sendPost(url, postdata, callback) {
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null) {
alert ("Browser does not support HTTP Request")
return
}
xmlHttp.onreadystatechange=callback
xmlHttp.open("POST",url,true)
xmlHttp.send(postdata);
}
function sendInitRQ(width, height) {
var post = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><command type=\"init\"><width>" + width + "</width><height>" + height + "</height></command>";
sendPost("http://localhost:80/socket.php", post, initReturned);
}
我知道php套接字正在接收帖子,因为当我检查服务器日志时,我在获取请求上得到200.
我只是想知道如何使用JSONP方法?
我已经看到了该方法的示例,但我仍然不确定如何做到这一点.
解决方法:
JSONP技术使用完全不同的机制向服务器发出HTTP请求并对响应进行操作.它需要客户端页面和服务器上的协作代码.服务器必须有一个URL,它响应HTTP“GET”请求,并在函数调用中包含一个JSON块.因此,您不能只对任何旧服务器执行JSONP事务;它必须是明确提供功能的服务器.
我们的想法是,您的客户端代码会创建一个< script>动态阻止,“src”属性设置为JSONP服务器的URL. URL应包含一个参数,告诉服务器您希望它使用JSON数据调用的Javascript函数的名称. (确切地说,要使用的参数名称取决于服务器;通常它是“回调”,但我看到一些使用“jsonp”.)客户端当然必须在全局范围内具有该功能.换句话说,如果你有一个像这样的功能
function handleJSON(json) {
var something = json.something;
// ... whatever ...
}
然后你的URL告诉服务器调用“handleJSON”,服务器响应应如下所示:
handleJSON({"id": 102, "something": { "more": "data", "random": true }});
因此,当< script>从您提供的“src”URL加载块,浏览器将解释内容(来自服务器的响应),并且将调用您的函数.
应该清楚的是,您应该只向您信任的服务器发出JSONP请求,因为它们会发回代码以在您的客户端中执行,并且可以访问您的客户端与其他安全站点之间的任何活动会话.
编辑 – 这是一篇很好的文章:http://www.ibm.com/developerworks/library/wa-aj-jsonp1/