Gwt 如何使用JsonpRequestBuilder获取JSON字符串
我使用GWT的JsonpRequestBuilder发出一个跨站点REST请求,该请求的响应是JSON对象 requestObject方法的回调参数是JavaScriptObject。Gwt 如何使用JsonpRequestBuilder获取JSON字符串,gwt,jsonp,Gwt,Jsonp,我使用GWT的JsonpRequestBuilder发出一个跨站点REST请求,该请求的响应是JSON对象 requestObject方法的回调参数是JavaScriptObject。 但我不想实现JavaScriptObject,而是直接解析JSON响应。我是否可以直接从JavaScriptObject或JsonpRequestBuilder的任何方法获取JSON字符串 使用requestString而不是requestObject。像这样: JsonpRequestBuilder jsonp
但我不想实现JavaScriptObject,而是直接解析JSON响应。我是否可以直接从JavaScriptObject或JsonpRequestBuilder的任何方法获取JSON字符串 使用requestString而不是requestObject。像这样:
JsonpRequestBuilder jsonp = new JsonpRequestBuilder();
jsonp.requestString(url,
new AsyncCallback<String>() { ...
如果您想使用
com.google.gwt.json.json
模块(说真的,您最好编写JavaScriptObject
s,这个json模块是一个可以使用的PITA),那么您只需将返回的JavaScriptObject
包装成JSONObject
或JSONArray
:
new JSONObject(myJavaScriptObject)
@顾
尝试在生成的json中转义引号。例如,在服务器端代码中
json = json.replace( "\"", "\\\"" )
然后将结果字符串换行,如下所示:
String jsonCallback = request.getParameter("jsonpcallback") //or any other name
StringBuilder response = new StringBuilder();
responseBody.append( jsonCallback ).append( "(\"" ).append( json ).append( "\");");
此代码适用于我的客户端:
JsonpRequestBuilder jsonp = new JsonpRequestBuilder();
jsonp.setCallbackParam("jsonpcallback");
jsonp.requestString(....);
另外,对不起。没有足够的分数来评论已经给出的答案。当我尝试AsyncCallback而不是AsyncCallback时,我无法调用成功或失败时的回调。同样,我无法使此版本正常工作。在firefox中,我得到一个classcastexception。当服务器返回一个字符串(例如,
“{”name:“Brad”}”
——注意撇号)时,使用requestString()
。如果服务器返回JavaScript对象(例如正确的JSON值,如{“name”:“Brad”}
),则需要使用requestObject()。使用错误的将导致ClassCastException。这对我来说很有效,正是我想要的,谢谢!我希望我能有足够的声誉给你投票。
JsonpRequestBuilder jsonp = new JsonpRequestBuilder();
jsonp.setCallbackParam("jsonpcallback");
jsonp.requestString(....);