0

我已经使用 Ajax 通过 JSONP 检索 JSON 从跨浏览器成功连接和回调我的数据,但是返回的数据是 Sydney 的正确回调,但其他 7 个未定义。我出错的任何想法。

结果

undefined
undefined
Sydney
undefined
undefined
undefined
undefined
undefined

代码

$.ajax({ 
    url: "xxxxxxxxxxxxxxxx&HotelID=187477&type=json",
    dataType: "jsonp",
    success: function(data) {

        $.each(data.HotelInformationResponse, function(i,data) {
            var div_data = " <div class='box'>"+data.city+"</div> ";

            $(div_data).appendTo("#target");
        });
    },
    error: function(e) {
        console.log(e.message);
        //alert('no');
    }
});

我在这里得到回报

Request URL:https://api.eancdn.com/ean-services/rs/hotel/v3/info?cid=55505&minorRev=99&apiKey=cbrzfta369qwyrm9t5b8y8kf&locale=en_US&HotelID=187477&type=json&callback=jQuery110205582368678878993_1376612818209&_=1376612818210
Request Method:GET
Status Code:200 OK
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-GB,en-US;q=0.8,en;q=0.6
Cache-Control:max-age=0
Connection:keep-alive
Host:api.eancdn.com
Referer:http://www.nelsonbaynsw.com/
User-Agent:Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.95 Safari/537.36
Query String Parametersview sourceview URL encoded
cid:55505
minorRev:99
apiKey:cbrzfta369qwyrm9t5b8y8kf
locale:en_US
HotelID:187477
type:json
callback:jQuery110205582368678878993_1376612818209
_:1376612818210
Response Headersview source
Accept-Ranges:none
Connection:Keep-Alive
Content-Encoding:gzip
Content-Length:4440
Content-Type:application/json
Date:Fri, 16 Aug 2013 00:27:02 GMT
Keep-Alive:timeout=5, max=100
Server:EAN
Vary:Accept-Encoding
X-Mashery-Responder:prod-p-worker-lax-03.mashery.com
4

1 回答 1

0

您的 json 响应中的 HotelInformationResponse 是一个对象,而不是一个数组。因此,当您这样做时,$.each(data.HotelInformationResponse,...您正在迭代它的每个属性。并且它的属性中只有一个具有名为 city 的属性,这HotelSummary就是为什么所有其他属性都未定义的原因。您可能想要做的就是:

success: function(data) {
    var city = data.HotelInformationResponse.HotelSummary.city;
    $('<div class="box">').text(city).appendTo("#target");
}

编辑 1

您当然可以each与对象一起使用。它不像使用数组那样普遍。数组使用的一个实际示例,您可以在其中列出三个不同酒店的名称和城市:

var hotels = [{name:'Hotel1', city:'Paris'},{name:'Hotel2', city:'London'},{name:'Hotel3', city:'Auckland'}];
$.each(hotels, function(i,hotel) {
    var div_data = " <div class='box'><p>Name: "+hotel.name+"</p><p>City: "+hotel.city+"</p></div> ";
    $(div_data).appendTo("#target");
});

请注意,通过使用属性名称,您可以准确地知道放置数据的内容和位置。当迭代一个对象时,你更有可能得到一个随机的属性列表:

success: function(data) {
    $.each(data.HotelInformationResponse.HotelSummary, function(i, propertyValue){
        // propertyValue could be a name, city, town, id...
    });
}

在这种情况下,最常见的用法是假设您知道要使用的属性,不会使用迭代,并且类似于我的第一个示例。但是,当然,这三个都可以根据您想要实现的目标来使用。

于 2013-08-16T03:37:55.033 回答