无法从JSON获取数据

时间:2013-06-13 11:34:28

标签: json jquery jquery-mobile cordova

我在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);
        }
    });
}

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

5 个答案:

答案 0 :(得分:3)

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

但是它和对象有关键,所以你应该能够像下面那样访问它们

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

在您的情况下,请尝试data.payment[i]或仅查看data.payment[i.toString()]

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

for (var key in data.payment)
{
   card_type += '<option value=' + data.payment[key] + '>' + data.payment[key] + '</option>';
                alert(data.payment[key]);
                alert(0);
}

答案 1 :(得分:1)

使用$ .each()

而不是使用for循环
$.each(data.payment,function(key,option)
{
  card_type_.append('<option value="'+key+'">'+option+'</option>');
});

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

*并且cfs指出了缺少的值=“”

的引号

答案 2 :(得分:1)

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

编辑您还错误地访问了阵列。 data.payment[i]

之间不需要点

请改为尝试:

card_type += '<option value="' + data.payment[i] + '">' + data.payment[i] + '</option>';

答案 3 :(得分:0)

我已将您的JSON代码放在JSONLinter中,看起来您的JSON代码无效。 您应该使用此代码:

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

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

答案 4 :(得分: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 !!