2013-12-10 6 views
0

Поэтому в основном я делаю Curl запрос и получение ответа, который выглядит следующим образом (var_dump):PHP строку в массив JSON

string(595) "{"user_id":1,"currency":"eur","purchase_packs":{"1":{"amount":500,"allowed_payment_methods":["ideal","paypal","visa","mc"]},"3":{"amount":1000,"allowed_payment_methods":["mc","ideal","paypal","visa"]},"6":{"amount":2500,"allowed_payment_methods":["mc","ideal","paypal"]},"8":{"amount":5000,"allowed_payment_methods":["ideal"]},"9":{"amount":10000,"allowed_payment_methods":["ideal"]}},"payment_methods":{"ideal":{"name":"ideal","allow_recurring":false},"paypal":{"name":"paypal","allow_recurring":false},"visa":{"name":"visa","allow_recurring":false},"mc":{"name":"mc","allow_recurring":false}}}" 

То, что я хочу, чтобы получить доступ к нему в файле JS, как это:

success: function (data) { 
    alert(data.user_id); 
} 

Но я не знаю, как правильно его преобразовать (?).

И мой следующий шаг (вопрос) после того, как это будет, если я могу сделать цикл для каждого купленного пакета, так что я могу создать кнопку для каждого из них

Возможно что-то вроде этого:

var pack; 
var packs = data.purchase_packs; 
for (pack= 0; pack < packs.length; pack++) { 
    console.log(packs[pack]); 
} 
+0

Ваш js-вызов ajax, если при использовании jquery может быть указан тип ответа, поэтому он будет возвращен json из вашего php и сохранит его как локальный объект, к которому вы можете получить доступ. – Dave

+0

не нужно преобразовывать его в php ни к чему ... это уже строка JSON. Просто строка эха для ajax, чтобы потреблять – charlietfl

+0

Ну, я пробовал, не преобразовывая его, просто эхо-строку, и когда я это делаю: data.user_id говорит, что он не определен. – user1410644

ответ

3

Я пытался понять свой "вопрос" ....

в ЯШ:

$.post('/some/url',{query: 'somequery'}, 
function (data) { 
    try { 
     data = JSON.parse(data); 
    } catch (e) { 
     return false; 
    } 
    console.log(data); 
}); 

В PHP:

data = json_decode(rtrim($myJSONEncodedString, "\0")); 
if (!empty($data->purchase_packs) 
    foreach ($data->purchase_packs as $key => $value) 
     var_dump($value); 
+0

JSON parse выполнил задание для правильного доступа к элементам. Но цикл for должен находиться в javascript-части кода, а не в PHP. Ответ Раджива Ранджана работает. Так вы оба помогли мне. Как выбрать лучший ответ в этом случае? – user1410644

+0

Нажмите «Принять этот ответ», который находится под ответом на счетчик голосов –

+0

Я знаю, как принять ответ. Я просто не знаю, какой из них выбрать. Но я поеду с тобой, потому что ты был быстрее, и это было первой частью моего вопроса. – user1410644

1

После получения ответа с помощью Curl, просто эхо, что JSon строки между <script></script> тегом.

Тогда строка JSON будет выглядеть следующим образом:

<script> 
var jsondata = {"user_id":1,"currency":"eur","purchase_packs":{"1":{"amount":500,"allowed_payment_methods":["ideal","paypal","visa","mc"]},"3":{"amount":1000,"allowed_payment_methods":["mc","ideal","paypal","visa"]},"6":{"amount":2500,"allowed_payment_methods":["mc","ideal","paypal"]},"8":{"amount":5000,"allowed_payment_methods":["ideal"]},"9":{"amount":10000,"allowed_payment_methods":["ideal"]}},"payment_methods":{"ideal":{"name":"ideal","allow_recurring":false},"paypal":{"name":"paypal","allow_recurring":false},"visa":{"name":"visa","allow_recurring":false},"mc":{"name":"mc","allow_recurring":false}}}; 
</script> 

Затем ваш яваскрипта код между <script></script>. Например:

<script src="http://code.jquery.com/jquery-latest.min.js"></script> 
<script> 
    alert(jsondata.user_id); // return user_id value 

    jQuery.each(jsondata.purchase_packs, function(i, val) { 
     alert(val.amount); // return amount 
     var paymentMethod = val.allowed_payment_methods; 
     jQuery.each(paymentMethod, function() { 
      alert(this); // will return all payment gateway method 
     });  
    }); 
</script> 

Надежда поможет!

+0

Это очень помогло! Спасибо! – user1410644

+0

ур приветствуется :) –

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