繁体   English   中英

如何处理来自Ajax调用的json响应

[英]How to process json response from ajax call

我的网络服务返回一个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要求的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: 'jsonp' ,不能使用async: false ; 这是因为它实际上并不使用XMLHttpRequest而是使用<script>标记使其跨域执行。 我相信jQuery只会忽略async设置而不会发出警告。

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

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

callback([1, 2, 3])

如前所述,如果您的Web服务不支持此功能,则需要使用CORS ,例如添加以下响应标头:

Access-Control-Allow-Origin: *

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM