2013-06-13 2 views
2

Работаю в jQuery Mobile и PhoneGap. В настоящее время у меня есть проблема с получением данных от JSON.Неисправность для получения данных от 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); 
     } 
    }); 
} 

Но его не работает !!! Я думаю сво простую ошибку, но я потерял много времени, чтобы решить эту проблему .. поэтому, пожалуйста, помогите мне :(

+1

Что не работает? Вы видите сообщения об ошибках в консоли? – cfs

+0

На самом деле я работал в DreamWeaver и Import to Eclipse. и когда я использую этот код, он показывает Синтаксическую ошибку .. :( –

+0

Что такое синтаксическая ошибка? Можете ли вы опубликовать сообщение об ошибке, которое вы получаете? – cfs

ответ

3

, когда вы используете json, так как в вопросе вы не можете получить к ним доступ как свойство beacuse, это число, помните, что вы не можете определить числовую переменную. или не может получить доступ к нему как массив, поскольку он является объектом.

, но он с и объект с ключом, так что вы должны быть в состоянии Acces их, как показано ниже

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

в вашем случае попробуйте data.payment[i] или просто в случае data.payment[i.toString()]

также просто замечает, вы используете для цикла так как это массив, но он не так data.payment.length возвращает undefined. вы должны использовать foreach loop для оплаты, попробуйте под кодом.

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

Вам не нужно явно указывать строку при доступе к свойствам. 'Obj [" 1 "]' такой же, как 'obj [1]', и вызов 'i.toString()' также не нужен. – cloudfeet

+0

@cloudfeet Просто попробовал, что вы правы. Спасибо за информацию. –

+0

@Onur TOPAL: его работа !!! :) Большое спасибо :) –

1

Вместо того, чтобы использовать для цикла, используйте $ .each()

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

Кроме что, я бы сказал data.payment. [я] должен быть data.payment [я]

* и, как CFS указал недостающие кавычки для значения = «»

+0

Мне очень жаль спрашивать об этом: wht u означает «ключ, опция»? –

+0

Смотрите: http://api.jquery.com/jQuery.each/ –

+0

Я уже пробовал data.payment [i] перед отправкой этого Q .. но никаких данных, отображаемых в selectbox .. thats prblm! –

1

Я не совсем то, что ошибка, которую вы , но я вижу, что создаваемый HTML недопустим: вам не хватает кавычек вокруг атрибута value в вашем option элементы.

EDIT Вы также неправильно обращаетесь к своим массивам. Вам не нужна точка между data.payment и [i]

Попробуйте вместо этого:

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

, когда мы используем этот тип метода .. его показывает ошибку синтаксиса .. :( –

+1

@ ULLASMOHAN.VI обновил мой ответ, чтобы решить, что может вызвать вашу синтаксическую ошибку – cfs

0

Я положил свой код JSON внутри JSONLinter и кажется, что ваш код JSON является недействительным. Вы должны использовать этот код вместо:

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

Вы также можете использовать $.each вместо «за».

+0

Да .. Но этот код отправляется от Клиента –

+0

Есть ли возможность получить данные из текущего формата? :( –

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 Топал !!

Смежные вопросы