【发布时间】:2013-10-01 20:38:15
【问题描述】:
我创建了一个 java webservice 来返回国家/地区列表
@RequestMapping(value = "/getcountrylist", method = RequestMethod.GET, headers = "Accept=application/json")
public @ResponseBody
@ApiIgnore
Object getcountrylist(@RequestParam String pvtToken,
@RequestParam String lan) {
System.out.println(API_TAG + "Request recevied to get CountryList");
System.out.println("DB:"+dbName);
if (!this.pvtToken.equals(pvtToken)) {
CountryList countryList = new CountryList();
return new ResponseEntity<CountryList>(countryList,
HttpStatus.UNAUTHORIZED);
}
CountryList countryList = avlMobileAPIService.getCountryList(lan);
return new ResponseEntity<CountryList>(countryList, HttpStatus.OK);
}
我需要从 javascript 调用上述 webservice 作为 JSONP,我编写了以下 javascript 代码如下
function buttonClick(){
$.ajax({
type: "GET",
dataType: "jsonp",
crossDomain: true,
url: "http://localhost:8080/api/getcountrylist",
data: {pvtToken:"JXku56AE0067YtRUSAZEE",lan:"en"},
Accept: "application/jsonp",
jsonpCallback: function(data, status){
alert('callback');
alert(data);
},
success: function(data, status){
alert('sucess');
},
});
}
以上函数调用webservice并返回列表,但在客户端显示“invalid label error”。
{"countrylist":[{"countryId":"4","countryCodeAlpha2":"AF","countryCodeAlpha3":"AFG","countryName":"Afghanistan ","isdCode":"93"},{"countryId":"5","countryCodeAlpha2":"AL","countryCodeAlpha3":"ALB","countryName":"Albania ","isdCode":"355"},{"countryId":"6","countryCodeAlpha2":"DZ","countryCodeAlpha3":"DZA","countryName":"Algeria ","isdCode":"213"},{"countryId":"7","countryCodeAlpha2":"AS","countryCodeAlpha3":"ASM","countryName":"American Samoa ","isdCode":"684"}]}
我在一些文章中发现它说,ajax 调用需要 JSONP ,但返回 JSON 数据。
解决办法是什么?
【问题讨论】:
-
我也尝试在 ajax 调用中使用以下属性 - 接受:“application/json”,contentType:“application/json”,但结果相同。
-
REST API 真的支持 JSONP 吗? (例如:返回带有在客户端执行的尾随 javascript 代码的 JSON 响应)。如果没有,那么您可能只想在
.ajax方法中使用success回调。从您的示例来看,它看起来像普通的JSON,而不是JSONP。 -
我不知道,我应该在 java 端做什么来支持 JSONP。我尝试了很多例子。
-
你不需要。只需将现有的
JSON响应与.ajax中的success回调一起使用。将dataType更改为json并为您解析结果,并将对象作为第一个参数返回给success回调。 -
我尝试使用以下代码 $.ajax({ type: "GET", dataType: "json", url: "localhost:8080/api/mobile_getcountrylist", data: {pvtToken:"JXku56AE0067YtRUSAZEE",lan: "en"}, contentType: "application/json", 成功: function(data, status){ alert('sucess'); }, });返回错误“NetworkError:500 内部服务器错误 - localhost:8080/api/…”