1

我的网络服务返回一个 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 仔细检查了 web 服务请求/响应是否正常,我什至可以拦截 web 服务和浏览器之间的 json 对象。

我也试过

var obj = JSON.parse(ajaxResult);
alert(obj);

我再次获得空值。

我已经看过Ajax call for the json response和类似的问题。请看我的 JSON 有点不同,所以这些解决方案要么不适用于我的案例,要么我没有遵循它们。

我是 AJAX 和 Java 脚本的新手,请指教。

编辑: 添加服务于这个 rest/getOptions 端点的 JERSEY 网络服务代码

@GET
@Path("getOptions")
@Produces(MediaType.APPLICATION_JSON)
public List<String> getOptionsJson() {
    //build alloptions List<String>
    return alloptions ;
}
4

1 回答 1

2

更新

您编辑了问题;您不能使用dataType: 'json',因为跨域问题只能通过在同一域上使用代理或通过CORS来克服。

使用dataType: 'jsonp'时不能使用async: false;这是因为它并没有真正使用XMLHttpRequest,而是使用<script>标签使其跨域。我相信 jQuery 只是忽略了async设置而不发出警告。

因此,alert()将始终为空,您应该将其移动到成功回调中。

要支持 JSONP,您的 Web 服务必须将返回的数据包装到由callbackGET 参数标识的函数调用中,例如

callback([1, 2, 3])

如果您的网络服务不支持这一点,如前所述,您将需要使用CORS,例如添加此响应标头:

Access-Control-Allow-Origin: *
于 2013-04-12T02:43:54.243 回答