2013-07-23 666 views
0

我试图使用JSON控制器Spring MVC中的视图发送一些数据,这里是在控制器代码:读取JSON数据

@RequestMapping(value="/twitter/searchgeomap", method=RequestMethod.GET) 
public String TwitterSearchGeoJSON(@RequestParam("query") String query) throws TwitterException { 
    List<Status> tweets = twitterService.twitterSearchGeo(query); 
    List<String> geoList = new ArrayList<String>(); 
    JSONObject json = new JSONObject(); 

    for (Status tweet : tweets) { 
     GeoLocation geo = tweet.getGeoLocation(); 
     String Latitude = String.valueOf(geo.getLatitude()); 
     String longitude = String.valueOf(geo.getLongitude()); 
     String text = tweet.getText(); 
     String place = tweet.getPlace().toString(); 

     geoList.add(text); 
     geoList.add(Latitude); 
     geoList.add(longitude); 
     geoList.add(place); 

     String key = String.valueOf(tweet.getId()); 
     json.accumulate(key, geoList); 
    } 

    return json.toString(); 
} 

,这里是我如何读JSON鉴于:

$(document).ready(function() { 
     $.getJSON("searchgeomap?query=obama", function(data){ 

      console.log("hi"); 
     }); 

}); 

的第一个问题是,我怎么能设置参数(查询),所以我不会需要把它放到请求“searchgeomap查询=奥巴马?”?另一个问题是console.log("hi");不起作用,我无法在控制台中看到输出,为什么在函数内部没有执行任何内容?我究竟做错了什么?

+0

如果您已从服务器获得成功响应(例如, 200响应)。您是否检查过“yoursite.com/searchgeomap?query=obama”是否可以访问,并回复200响应? – Steve

+0

我得到200 respose –

+0

它似乎在这[小提琴](http://jsfiddle.net/P8KPR/)中工作得很好。 – Steve

回答

1

我认为你缺少注释@ResponseBody在你的控制器的签名,这样

public @ResponseBody String TwitterSearchGeoJSON(@RequestParam("query") String query) throws TwitterException 
+0

谢谢,我没有注意到这个错误... –

1

以及关于第一个问题..你可以提供的数据作为对象

$.getJSON("searchgeomap",{query:"obama"}, function(data){ 
     //--^^url--------^^---object 

     console.log("hi"); 
}); 

,并为您的第二个问题..没有您使用此URL在同一个域中..看起来像你打电话Twitter的功能..反正如果是,那么你需要看看阿贾克斯JSONP否则将无法正常工作

+0

是的,我使用Twitter API,但我的请求是在我的本地主机上,它不是跨域的。实际上,在我的控制器中,我从Twitter API获取数据(搜索结果),然后格式化它们并将它们发送为json ... –

+0

检查开发人员工具在Chrome中的控制台选项卡...如果一切正常...您应该得到由控制器返回的json在那里,否则检查你的响应标签网络下的链接,你应该有返回json对象... – bipen