2

我在 jQuery Mobile 和 PhoneGap 工作。目前,我无法从 JSON 中获取数据。

我的 JSON 格式是;

{
    payment: {
        1: "Visa",
        2: "American Express",
        3: "Mastercard/Eurocard",
        4: "Visa – Verified by Visa",
        5: "Mastercard/Eurocard – Securecode"
    }
}

它的 XML 看起来像这样;

   <payment>

       <1>Visa</1>

       <2>American Express</2>

       <3>Mastercard/Eurocard</3>

       <4>Visa – Verified by Visa</4>

       <5>Mastercard/Eurocard – Securecode</5>

   </payment>

我想将详细信息提取到选择框中。 我的代码是;

function loadpayment() {
    $.ajax({
        url: 'https://www.sample.net/json/jsn_payments.php?json=1&rcg_mobile=2',
        data: '',
        contentType: "application/json; charset=utf-8",
        type: "POST",
        dataType: "json",
        crossDomain: true,
        cache: false,
        async: false,
        success: function (data, textStatus, jqXHR) {
            var count = data.payment.length;
            var card_type_ = $('#card_type_');
            var card_type = '';
            card_type_.empty();
            card_type += '<option selected="selected" value="">' + BookCar2_Cardtype_label + '</option>';

            for (i = 1; i < count; i++) {
                card_type += '<option value=' + data.payment.[i] + '>' + data.payment.[i] + '</option>';
                alert(data.payment.payment[i]);
                alert(0);
            }
            card_type_.append(card_type);
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert(textStatus + "-" + errorThrown);
        }
    });
}

但它不工作!我认为这是一个简单的错误,但我浪费了很多时间来解决这个问题..所以请帮助我:(

4

5 回答 5

3

当您在问题中使用 json 时,您无法将它们作为属性访问,因为它是一个数字,请记住您不能定义数字变量。或者不能像数组一样访问它,因为它是一个对象。

但它是带有键的对象,因此您应该能够像下面一样访问它们

obj["1"], obj["2"] etc

在你的情况下尝试data.payment[i]或以防万一data.payment[i.toString()]

也只是注意到您正在使用 for 循环,因为它是一个数组,但它不是data.payment.length返回未定义的。您应该使用 foreach 循环进行付款,请尝试以下代码。

for (var key in data.payment)
{
   card_type += '<option value=' + data.payment[key] + '>' + data.payment[key] + '</option>';
                alert(data.payment[key]);
                alert(0);
}
于 2013-06-13T11:58:12.743 回答
1

不要使用 for 循环,而是使用 $.each()

$.each(data.payment,function(key,option)
{
  card_type_.append('<option value="'+key+'">'+option+'</option>');
});

除此之外,我会说 data.payment.[i] 应该是 data.payment[i]

*正如 cfs 指出 value="" 缺少的引号

于 2013-06-13T11:39:49.847 回答
1

我不完全是您看到的错误,但我可以看到您创建的 HTML 无效:您在option元素中缺少 value 属性的引号。

编辑您也错误地访问了您的数组。你不需要在 thedata.payment和 the之间加一个点[i]

试试这个:

card_type += '<option value="' + data.payment[i] + '">' + data.payment[i] + '</option>';
于 2013-06-13T11:42:53.517 回答
0

我已将您的 JSON 代码放入 JSONLinter 中,您的 JSON 代码似乎无效。您应该改用此代码:

{
    "payment": [
        "Visa",
        "American Express",
        "Mastercard/Eurocard",
        "Visa – Verified by Visa",
        "Mastercard/Eurocard – Securecode"
    ]
}

您也可以使用$.each代替“for”。

于 2013-06-13T11:51:16.197 回答
0

最后我得到了解决方案:-)

我的代码是:

 function loadpayment(){

$.ajax({ 

 url: 'https://www.sample.net/json/jsn_payments.php?json=1&rcg_mobile=2',
 data:'',
 contentType: "application/json; charset=utf-8",
 type: "POST",
 dataType: "json",
 crossDomain:true,
 cache: false,
 async:false,
 success: function(data, textStatus, jqXHR){

     var count = data.payment.length;
      //alert(count);
     var card_type_=$('#card_type_'); 
     var card_type = '';
     card_type_.empty();
     card_type +='<option selected="selected" value="">'+BookCar2_Cardtype_label+'</option>';
    for (var key in data.payment)
    {
        card_type += '<option value=' + data.payment[key] + '>' + data.payment[key] + '</option>';

    }

    card_type_.append(card_type);


},

 error: function(XMLHttpRequest, textStatus, errorThrown){alert(textStatus +"-"+ errorThrown);}

});

}

谢谢你..@Onur TOPAL!

于 2013-06-13T12:55:46.130 回答