0

我有以下复杂的 jSON 字符串,它在 jquery 1.8 的 Ajax 调用中返回

listCountries({"totalResults":3,"countrynames":[
{"countryName":"Afghanistan","fName":"parks,area, ...","lng":1,"code":"continent"},
{"countryName":"Albenia","fName":"parks,area, ...","lng":2,"code":"continent"},
{"countryName":"Algeria","fName":"parks,area, ...","lng":3,"code":"continent"}
]});

我想使用这个 JSON 数据填充一个选择框。

我正在做以下事情

 $.getJSON(someurl)
            .success(function (data) {
                var list= "";
                for (var i = 0; i < data.countrynames.length; i++) {
                    list += "<option value='" + data.countrynames[i].lng + "'>" + data.countrynames[i].countryName + "</option>";
                }
$("#names").html(list);

但是,该列表不会被填充。任何人都可以提出原因。还有更好的做法来遍历这个 JSON 字符串并填充选择框。

4

1 回答 1

0

服务器没有返回 JSON。它正在返回JSONP。JSONP 是您从不同域请求数据时必须采取的额外步骤。

这是 JSON:

{"totalResults":3,"countrynames":[
{"countryName":"Afghanistan","fName":"parks,area, ...","lng":1,"code":"continent"},
{"countryName":"Albenia","fName":"parks,area, ...","lng":2,"code":"continent"},
{"countryName":"Algeria","fName":"parks,area, ...","lng":3,"code":"continent"}
]}

您的 AJAX 调用似乎没有请求 JSONP,因此您的服务器代码似乎不正确。一种选择是修复您的服务器代码以返回 JSON。

或者,如果您不能,那么此代码将起作用。

$.getJSON(someurl)
    .success(function (data) {
        // remove the listCountries function name, and the two parentheses.  
        // Then convert the string into an object
        data = JSON.parse(data.substr(14, data.length - 16))

        // you forgot the select opening & closing tags
        var list= "<select>";
        for (var i = 0; i < data.countrynames.length; i++) {
            list += "<option value='" + data.countrynames[i].lng + "'>" + data.countrynames[i].countryName + "</option>";
        // you forgot the closing bracket
        }
        list += '</select>';
        $("#names").html(list);
    }
于 2012-11-04T06:12:11.393 回答