当您的 smartGWT 数据源调用此 URL 时:
http://www.smartclient.com/smartgwt/showcase/data/dataIntegration/json/contactsData.js
(如果您的数据源正在调用 Java 应用程序,请转到此答案的底部)
您的数据源将发出的请求将包含一个名为 callback 的 GET 参数,如下所示:
callback=isc.Comm._scriptIncludeReply_0
脚本contactsData.js 将需要捕获此GET 参数。
contactsData.js 需要包含一个库来从 URL 中检索参数:
javascript检索参数功能:
function getParameter ( queryString, parameterName ) {
// Add "=" to the parameter name (i.e. parameterName=value)
var parameterName = parameterName + "=";
if ( queryString.length > 0 ) {
// Find the beginning of the string
begin = queryString.indexOf ( parameterName );
// If the parameter name is not found, skip it, otherwise return the value
if ( begin != -1 ) {
// Add the length (integer) to the beginning
begin += parameterName.length;
// Multiple parameters are separated by the "&" sign
end = queryString.indexOf ( "&" , begin );
if ( end == -1 ) {
end = queryString.length
}
jQuery 检索参数函数
http://ajaxcssblog.com/jquery/url-read-request-variables/
获得回调参数的值后,您将使用 JSON 作为参数在响应正文中写入函数名称,如下所示:
isc.Comm._scriptIncludeReply_0({"item": [ {"id": "1","name": "Monkey"},
{"id": "2","name": "Tree"},
{"id": "3","name": "Banana"} ] })
所以 javascript 代码看起来像这样:
Response.Write(getParameter(URLrequestFromDatasourceString,"callback") + " ( " + JSON + " )" );
JAVA
如果您的 smartGWT 数据源调用 Java 应用程序 URL:
http://www.smartclient.com/getJson.htm
你的 Java 控制器会做同样的事情,但它更容易
String callbackString = request.getParameter("callback");
response.setContentType("text/X-JSON");
response.getWriter().write( callbackString + " ( " + JSONstring + " ) " );
response.setStatus(HttpServletResponse.SC_OK);
此外,这里是关于该问题的博客文章的链接