我在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);
}
});
}
但它不起作用!!!我认为这是一个简单的错误,但我失去了很多时间来解决这个问题..所以请帮助我:(
答案 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 !!