使用jQuery进行跨域ajax JSONP请求



我想用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}

但我没有得到任何输出。。。任何人都请帮忙。。。

概念说明

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

您的代码看起来很好,如果您的web服务和web应用程序托管在同一域中,它应该可以工作。

当您使用dataType: 'jsonp'执行$.ajax时,这意味着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数据。即

如果您使用查询字符串进行了请求

?callback=my_callback_method

然后,您的服务器必须像这样包装响应数据:

my_callback_method({your json serialized data});

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

只需添加选项crossOrigin:真正的

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

您的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;
        },
    });
}        

编辑此外,城市和代码的情况也不正确。(感谢@Christopher Kenney)

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

更新根据您的最新评论,您应该阅读以下答案:https://stackoverflow.com/a/11736771/325836Abdul-Munim

尝试

alert(xml.Data[0].City)

区分大小写

您需要使用jquery json解析您的xml。。。即

  var parsed_json = $.parseJSON(xml);

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

使用xml.data["data"][0].city代替

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

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

最新更新