Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gwt 如何使用JsonpRequestBuilder获取JSON字符串_Gwt_Jsonp - Fatal编程技术网

Gwt 如何使用JsonpRequestBuilder获取JSON字符串

Gwt 如何使用JsonpRequestBuilder获取JSON字符串,gwt,jsonp,Gwt,Jsonp,我使用GWT的JsonpRequestBuilder发出一个跨站点REST请求,该请求的响应是JSON对象 requestObject方法的回调参数是JavaScriptObject。 但我不想实现JavaScriptObject,而是直接解析JSON响应。我是否可以直接从JavaScriptObject或JsonpRequestBuilder的任何方法获取JSON字符串 使用requestString而不是requestObject。像这样: JsonpRequestBuilder jsonp

我使用GWT的JsonpRequestBuilder发出一个跨站点REST请求,该请求的响应是JSON对象

requestObject方法的回调参数是JavaScriptObject。
但我不想实现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(....);