簡體   English   中英

如何將JSON轉換為數組並在jQuery中循環它?

[英]How to convert JSON to array and loop over it in jQuery?

我正在使用JSON與用戶進行通信。 PHP將數組轉換為JSON到這種形式:

{"success":"text-to-display","warning":"NONE","notice":"text-to-display","error":"NONE"}

jQuery顯示通知:

function callback (data){
    if(data.notice !== 'NONE'){
        displayNotice(data.notice);
    }
    if(data.success !== 'NONE'){
        displaySuccess(data.success);
    }
    if(data.warning !== 'NONE'){
        displayWarning(data.warning);
    }
    if(data.error !== 'NONE'){
        displayError(data.error);
    }
}

不幸的是,在這個方法中不能顯示兩個錯誤或兩個通知或兩個警告,因為新語句替換舊語句。

<?php
$uwaga['error'] = 'old statement';
$uwaga['error'] = 'new statement';
// display only "new statement"
echo json_encode($uwaga);
?>

我認為使用數組:

<?php
$uwaga = array();
$uwaga[1] = array('type' => 'notice', 'text' => 'old statement');
$uwaga[2] = array('type' => 'notice', 'text' => 'new statement');
// display "new statement" and "old statement"
// generate: {"1":{"type":"notice","text":"old statement"},"2": {"type":"notice","text":"new statement"}}
    echo json_encode($uwaga);
?>

如何在jQuery上“翻譯”這個PHP代碼(主要是:如何將json對象轉換為數組?如何使用循環?如何使用此循環?如何引用$uwaga[$key]['name']$uwaga[$key]['text'])

foreach ($uwaga as $key => $value) {
switch ($uwaga[$key]['name']) {
    case 'warning':
        displayWarning($uwaga[$key]['text']);
        break;
}}

好吧,假設我們有一個PHP數組

PHP:

<?php
$myArray = array(
    "test1"=>array("name"=>"test1name", "value"=>"test1value"),
    "test2"=>array("name"=>"test2name", "value"=>"test2value"),
    "test3"=>array("name"=>"test3name", "value"=>"test3value")
);

// Now make a javascript variable containing echoed JSON
echo "<script type='text/javascript'>var returnedJSON = " . json_encode($myArray) . ";</script>";

這將輸出以下JSON,為您提供一個javascript對象:

var returnedJSON = {"test1":{"name":"test1name","value":"test1value"},"test2":{"name":"test2name","value":"test2value"},"test3":{"name":"test3name","value":"test3value"}};

使用Javascript:

//Once you have the variable from above which can come in various ways (through ajax, jsonp etc) you can iterate over it quite simply in jQuery
$.each(returnedJSON, function (index, value) {
    console.log(index + ": " + value.name);
});

http://api.jquery.com/jquery.each/

演示http://jsfiddle.net/robschmuecker/HqarE/1/

而不是這個:

$uwaga = array();
$uwaga[1] = array('type' => 'notice', 'text' => 'old statement');
$uwaga[2] = array('type' => 'notice', 'text' => 'new statement');

只需這樣做,沒有索引:

$uwaga = array();
$uwaga[] = array('type' => 'notice', 'text' => 'old statement');
$uwaga[] = array('type' => 'notice', 'text' => 'new statement');

這將在數​​組的末尾為它們分配索引(從零而不是一個)。

然后采取所有這些:

if(data.notice !== 'NONE'){
    displayNotice(data.notice);
}
if(data.success !== 'NONE'){
    displaySuccess(data.success);
}
if(data.warning !== 'NONE'){
    displayWarning(data.warning);
}
if(data.error !== 'NONE'){
    displayError(data.error);
}

...並將它們包裝在一個jQuery的each()each()如Rob推薦的那樣。 它將成為(假設數據在json.messages ):

$.each(json.messages, function (index, data) {
    if(data.notice !== 'NONE'){
        displayNotice(data.notice);
    }
    if(data.success !== 'NONE'){
        displaySuccess(data.success);
    }
    if(data.warning !== 'NONE'){
        displayWarning(data.warning);
    }
    if(data.error !== 'NONE'){
        displayError(data.error);
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM