带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。请注意,这仅在现代浏览器中受支持
  • 在域上使用代理服务器