我的webservice返回一个JSON对象,如下面的
["abc","xyz","option_3"]
即。当我把这个地址放在Chrome浏览器中http://localhost:8088/rest/getOptions
时,我就超越了。
我正在尝试在浏览器中阅读此内容,以便我可以创建一个下拉选项...但我从下面的代码中得不到任何内容:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script type="text/javascript">
url="http://localhost:8088/rest/getOptions";
var ajaxResult = null;
function getData(yt_url){
$.ajax
({
type: "GET",
url: yt_url,
dataType:"json",
async: false,
success: function(response){
ajaxResult = response;
}
});
}
getData(url);
alert(ajaxResult);
</script>
</head>
<body>
</body>
</html>
我总是在警告框中显示null
。我用fiddler2仔细检查了webservice请求/响应是否正常,我甚至可以拦截webservice和浏览器之间的json对象。
我也试过
var obj = JSON.parse(ajaxResult);
alert(obj);
我再次失效。
我已经查看了Ajax call for the json response和类似的问题。请注意我的JSON有点不同,所以要么这些解决方案不适用于我的情况,要么我没有遵循它们。
我是AJAX和Java脚本的新手,请指教。
修改 添加为休息/ getOptions端点提供服务的JERSEY webservice代码
@GET
@Path("getOptions")
@Produces(MediaType.APPLICATION_JSON)
public List<String> getOptionsJson() {
//build alloptions List<String>
return alloptions ;
}
答案 0 :(得分:2)
<强>更新强>
您编辑了问题;您无法使用dataType: 'json'
,因为跨域问题只能通过在同一个域上使用代理或通过CORS来解决。
使用dataType: 'jsonp'
时,您无法使用async: false
;这是因为它并没有真正使用XMLHttpRequest
,而是使用<script>
标记使其成为跨域。我相信jQuery会忽略async
设置,而不会发出警告。
因此,alert()
将始终为空,您应该将其移至成功回调中。
为了支持JSONP,您的Web服务必须将返回的数据包装到由callback
GET参数标识的函数调用中,例如
callback([1, 2, 3])
如果您的网络服务不支持这一点,如前所述,您需要使用CORS,例如添加此响应标头:
Access-Control-Allow-Origin: *