我想使用以下代码用jquery ajax解析JSON数组数据:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sample</title>
<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
    var result;
    function jsonparser1() {
        $.ajax({
            type: "GET",
            url: "http://10.211.2.219:8080/SampleWebService/sample.do",
            dataType: "jsonp",
            success: function (xml) {
                alert(xml.data[0].city);
                result = xml.code;
                document.myform.result1.value = result;
            },
        });
    }        
</script>    
</head>
<body>
<p id="details"></p>
<form name="myform">
    <input type="button" name="clickme" value="Click here to show the first name" onclick=jsonparser1() />
    <input type="text" name="result1" readonly="true"/>        
</form>
</body>
</html>


我的JSON数据是:

{"Data":   [{"Address":"chetpet","FirstName":"arulmani","Id":1,"LastName":"sathish","City":"chennai"},{"Address":"ramapuram","FirstName":"raj","Id":2,"LastName":"nagu","City":"chennai"},{"Address":"ramapuram","FirstName":"raj","Id":2,"LastName":"nagu","City":"chennai"},{"Address":"ramapuram","FirstName":"ramaraj","Id":3,"LastName":"rajesh","City":"chennai"},{"Address":"ramapuram","FirstName":"yendran","Id":3,"LastName":"sathi","City":"chennai"}],"Code":true}


但是我没有得到任何输出...任何人请帮忙...

评论

也许是您的后端不返回任何东西。发表吧!

使用JSON.parse解析JSON数据。成功:function(data){var result = JSON.parse(data); document ... value = result.Code; }

我在这里为这个问题写了一个答案:使用jQuery AJAX加载跨域html页面–最后一个,支持https

#1 楼

概念说明

您是否正在尝试进行跨域AJAX调用?意思是,您的服务不在同一Web应用程序路径中托管吗?您的Web服务必须支持方法注入才能执行JSONP。

您的代码看起来不错,并且如果您的Web服务和Web应用程序托管在同一域中,则它应该可以正常工作。

当您使用$.ajax进行dataType: 'jsonp'时,意味着jQuery实际上是在查询URL中添加新参数。

例如,如果您的URL是http://10.211.2.219:8080/SampleWebService/sample.do,则jQuery将添加?callback={some_random_dynamically_generated_method}

此方法实际上是window对象中附加的一种代理。这没有什么特别的,但是确实是这样的:

window.some_random_dynamically_generated_method = function(actualJsonpData) {
    //here actually has reference to the success function mentioned with $.ajax
    //so it just calls the success method like this: 
    successCallback(actualJsonData);
}


摘要

您的客户端代码似乎还不错。但是,您必须修改服务器代码以使用通过查询字符串传递的函数名称包装JSON数据。 ie

如果您已请求查询字符串

?callback=my_callback_method


,那么您的服务器必须响应包装如下的数据:

my_callback_method({your json serialized data});


评论


我在这里写了这个问题的答案:使用jQuery AJAX加载跨域html页面–最后一个,支持https

– jherax
14年6月26日在16:01

@AbdulMunim:是否可以在$ .ajax的url属性中提及json文件? url属性支持哪些文件扩展名?填充的js回调返回的结果是什么?

–穆罕默德·侯赛因(Mohamed Hussain)
2015年10月19日在8:38

这就是为什么我收到此错误的原因:控制台中出现Uncaught SyntaxError:Unexpected token:吗?该错误具有一个链接,一旦我单击该链接,就会向我显示JSON数据。

– Si8
17年1月26日在21:28

#2 楼

您需要使用ajax-cross-origin插件:
http://www.ajax-cross-origin.com/

只需添加选项crossOrigin:true

$.ajax({
    crossOrigin: true,
    url: url,
    success: function(data) {
        console.log(data);
    }
});


评论


如果我做对了,它将通过第三方代理路由。方便,但是通过服务器的流量可能会破坏最初的想法

–费捷
16年7月31日在21:45

我添加了相同的内容,但是每次都给出失败的错误。我正在使用jsonp数据类型。

– Mohneesh Agrawal
17年11月13日在10:34

#3 楼

您的JSON数据包含属性Data,但是您正在访问data。区分大小写

function jsonparser1() {
    $.ajax({
        type: "GET",
        url: "http://10.211.2.219:8080/SampleWebService/sample.do",
        dataType: "json",
        success: function (xml) {
            alert(xml.Data[0].City);
            result = xml.Code;
            document.myform.result1.value = result;
        },
    });
}        


EDIT同样,City and Code在错误的情况下。 (感谢@Christopher Kenney)

EDIT2也应该是json,而不是jsonp(至少在这种情况下)

UPDATE根据您的最新评论,您应该阅读此内容答案:Abdul Munim的https://stackoverflow.com/a/11736771/325836

评论


如果您尝试直接浏览到URL,该怎么办?

– Yngve B-Nilsen
2012年7月31日在9:42

在浏览器的错误控制台中会得到什么错误?

– Yngve B-Nilsen
2012年7月31日上午9:56

它显示出意外的令牌:在JSON数据中...但是在JSON中使用数组正确的方式正确吗?

– prabu R
2012年7月31日上午10:04

@ChristopherKenney:如果我将数据类型设为“ json”,则显示错误。好的,如果我把它设为“ jsonp”。

– prabu R
2012年7月31日上午10:46

如果我使用json而不是jsonp,则会发生错误:1)XMLHttpRequest无法加载10.211.2.219:8080/SampleWebService/sample.do。 Access-Control-Allow-Origin不允许源localhost:3555。 sample.do 2)GET 10.211.2.219:8080/SampleWebService/sample.do未定义(未定义)

– prabu R
2012年7月31日12:40



#4 楼

尝试

alert(xml.Data[0].City)


敏感地输入大小写!

#5 楼

您需要使用jquery json parse来解析xml ...即

  var parsed_json = $.parseJSON(xml);


评论


那是成功的功能吗?因为我在控制台中收到一个错误:Uncaught SyntaxError:Unexpected token:,它显示了错误功能警报,甚至没有击中成功功能。

– Si8
17年1月26日在21:30

#6 楼

alert(xml.data [0] .city);

请改用xml.data [“ Data”] [0] .city

#7 楼

使用由Yahoo托管的开放式公共代理YQL。处理XML和HTML

https://gist.github.com/rickdog/d66a03d1e1e5959aa9b68869807791d5