我的网络服务返回一个JSON对象,如下所示
["abc","xyz","option_3"]
即,当我将此地址放入chrome浏览器中时,http://localhost:8088/rest/getOptions我可以到达上面。
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再次检查了Web服务请求/响应是否正常,我什至可以拦截Web服务和浏览器之间的json对象。
null
我也试过
var obj = JSON.parse(ajaxResult); alert(obj);
我又得到了空。
我已经看过Ajax要求的json响应和类似的问题。请查看我的JSON有点不同,所以这些解决方案不适用于我的情况,或者我没有遵循它们。
我是AJAX和Java脚本的新手,请指教。
编辑: 添加提供此rest / getOptions端点的JERSEY Web服务代码
@GET @Path("getOptions") @Produces(MediaType.APPLICATION_JSON) public List<String> getOptionsJson() { //build alloptions List<String> return alloptions ; }
更新资料
您编辑了问题;您不能使用,dataType: 'json'因为跨域问题只能通过在同一域上使用代理或通过CORS来解决。
dataType: 'json'
当你使用时dataType: 'jsonp'你不能使用async: false; 这是因为它并没有真正使用,XMLHttpRequest而是使用<script>标记来使其跨域使用。我相信jQuery只会忽略该async设置而不会发出警告。
dataType: 'jsonp'
async: false
XMLHttpRequest
<script>
async
因此,alert()将始终为空,您应将其移至成功回调中。
alert()
为了支持JSONP,您的Web服务必须将返回的数据包装到由callbackGET参数标识的函数调用中,例如
callback
callback([1, 2, 3])
如前所述,如果您的Web服务不支持此功能,则需要使用CORS,例如添加以下响应标头:
Access-Control-Allow-Origin: *