0

我正在使用 JSON 调用来根据传入的课程代码检索可用参与者位置的列表。想法是然后使用结果来填写已动态添加到页面的选择。我得到了正确的响应,但是将其添加到页面的代码不起作用。

$("#venueCourses").live("change",function (event) {
    var cID = $("#venueCourses").val().split("|");

    -- This call works and provides a list of dates for the course passed in
    $.post("includes/ajaxdates.asp",{courseID:cID[0], lessonType:cID[1], retType:"dl"},function(result){
            -- The data is displayed correctly
            $("#cdisplay").html(result);
    });

    -- This is the JSON Call that retrieves data
    $.getJSON('includes/ajaxdates.asp',{courseID:cID[0], lessonType:cID[1], retType:"lt", ajax: 'true'}, function(data) {

        -- NOTHING IN HERE SEEMS TO WORK
        var items = [];
        $.each(data, function(key, val) {
              items.push('<option value="' + key + '">' + val + '</option>');
        });

        $('<select/>', {
             'id': 'participantType',
             html: items.join('')
             }).appendTo('#partType');
    });
});

JSON 调用提供此 URL 以检索来自http://www.surreyjive.co.uk/includes/ajaxdates.asp?courseID=ES-1-2013&lessonType=Intermediates&retType=lt&ajax=true的响应

这是 JSON 响应 {'0':'Please Select','Lady':'Individual Lady','Couple':'Couple'}

上面不起作用的代码实际上曾经是这段代码也不起作用:

 var options = [];
 for (var i = 0; i < j.length; i++) {
    options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
}
 alert(j);
 $("#participantType").html(options);

任何解决此问题的帮助将不胜感激。

非常感谢格雷厄姆

4

2 回答 2

1

根据您的响应数据,以下脚本应该可以工作。

var response = ' {"values": {"option": [{"value": "0","text": "Please Select"},{"value": "lady","text": "Individual Lady"},{"value": "gent","text": "Individual Gent"},{"value": "couple","text": "Couple"}]}}';
var data = jQuery.parseJSON(response);
var selectBox = $('<select/>', {'id': 'participantType'});
$.each(data.values.option, function(key, option) {
    $('<option />', {value: option.value, text: option.text}).appendTo(selectBox);
});
selectBox.appendTo('#partType');
于 2012-08-07T07:38:43.357 回答
0

好的,所以在用一些新的眼光看待这个问题之后,我终于设法解决了这个问题。这可能不是修复它的最佳方法,但确实给了我想要的结果。所以第一个变化是替换了返回 JSON 的方法。

由此:

$.getJSON('includes/ajaxdates.asp',{courseID:cID[0], lessonType:cID[1], retType:"lt", ajax: 'true'}, function(data) {

对此:

$.get('includes/ajaxdates.asp',{courseID:cID[0], lessonType:cID[1], retType:"lt", ajax: 'false'}, function(d) {

所以我将 $.getJSON 替换为 $.get,所以我的 ASP 页面返回了一个文本字符串。

文本字符串从回调函数返回到变量 d 中,因此这是 JSON 解析为变量数据。

var data = jQuery.parseJSON(d);

Et Voila 脚本每次都有效。我知道 MULTIDOT 的代码确实适用于 JSON 文本字符串,但不适用于对象。这是我真正缺乏知识的地方,因此很高兴了解我在原始脚本中出了什么问题。

非常感谢 MULTIDOT 的所有帮助。

干杯格雷厄姆

于 2012-08-08T19:12:31.550 回答