我有一个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 = ""; sendPost("http://localhost:80/socket.php", post, initReturned); } " + width + " " + height + "
我知道php套接字正在接收帖子,因为当我检查服务器日志时,我在获取请求上得到200.
我只是想知道如何使用JSONP方法?我已经看到了该方法的示例,但我仍然不确定如何做到这一点.
JSONP技术使用完全不同的机制向服务器发出HTTP请求并对响应进行操作.它需要客户端页面和服务器上的协作代码.服务器必须有一个URL,它响应HTTP"GET"请求,并在函数调用中包含一个JSON块.因此,您不能只对任何旧服务器执行JSONP事务; 它必须是明确提供功能的服务器.
这个想法是你的客户端代码动态创建一个块,"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 }});
因此,当从您提供的"src"URL加载块时,浏览器将解释内容(来自服务器的响应),并且将调用您的函数.
应该清楚的是,您应该只向您信任的服务器发出JSONP请求,因为它们会发回代码以在您的客户端中执行,并且可以访问您的客户端与其他安全站点之间的任何活动会话.
编辑 - 这是一篇很好的文章:http://www.ibm.com/developerworks/library/wa-aj-jsonp1/