带Post的GWT JSONP无法获取
我有一个形式为带Post的GWT JSONP无法获取,gwt,post,jsonp,Gwt,Post,Jsonp,我有一个形式为`http://....../methodName 它返回一个jsonp结果,例如: methodName(["a":"a", "b":"b"]) GWT提供JsonpRequestBuilder类来解析jsonp JsonpRequestBuilder rb = new JsonpRequestBuilder(); rb.setCallbackParam("callback"); rb.requestObject("http://...../methodNam
`http://....../methodName
它返回一个jsonp结果,例如:
methodName(["a":"a", "b":"b"])
GWT提供JsonpRequestBuilder类来解析jsonp
JsonpRequestBuilder rb = new JsonpRequestBuilder();
rb.setCallbackParam("callback");
rb.requestObject("http://...../methodName", new AsyncCallback<TestJS>(){
...
});
JsonpRequestBuilder rb=newjsonprequestbuilder();
rb.setCallbackParam(“回调”);
rb.requestObject(“http://...../methodName,新的AsyncCallback(){
...
});
此结构向url发出请求:
”http://...../methodName/?callback=__gwt_jsonp_P0.onSuccess“
我的web服务返回一个带有methodName的回调,而不是带有\uuu gwt\u json。。。。。
因此gwt无法从该响应创建JavaScriptObject。
JsonpRequestBuilder也可以与GET not POST一起使用
如何实现这些:使用POST发送请求并修改GWT的默认回调名称 不幸的是,JsonP不是这样工作的。请求是通过向页面添加一个标记来完成的,结果被传递到一个围绕数据的函数中——在您的例子中是,
\uuuugwt\ujsonp\u P0.onSuccess
至少在使用JsonpRequestBuilder
时,回调名称不会受到影响–系统需要考虑这样一个事实,即您可以一次发送多个请求,甚至可能发送到不同的端点。不允许调用方自定义回调函数名的JsonP端点是非常不寻常的,更奇怪的是,一个端点需要JsonP调用,却需要一个不可能的POST
您可以通过使用ScriptElement
类型实现自己的JsonP客户端代码,并注册自己的全局回调以调用GWT java代码
查看web服务的API文档,看看是否有更好的方式与之通信,也许可以在您自己的服务器上使用代理,从而完全避免跨域问题。JSONP将不使用POST。顺便说一句,这不是GWT限制 JSONP本质上包括来自服务器的javascript文件。因此,在进行JSONP调用时,会向DOM中添加一个临时标记 现在,
标记总是可以发出GET请求。这是浏览器的事情,GWT对此无能为力
如果要进行跨域POST调用,必须从以下选项中选择一个(它们与GWT无关)
- 使用Flash加上允许跨域发布的crossdomain.xml
- 使用跨来源资源共享或CORS。请注意,这仅在现代浏览器中受支持
- 在域上使用代理服务器