簡體   English   中英

如何使用json_encode從php獲取數據到javascript?

[英]how to get data to javascript from php using json_encode?

我正在嘗試將 traceroutes 映射到谷歌地圖。

我在 php 中有一個帶有 traceroute 數據的數組

$c=ip,latitude,longitude, 2nd ip, its latitude, longitude, ....target ip, its lat, its lng

我使用了json_encode($c, JSON_FORCE_OBJECT)並保存了文件

現在,如何使用 javascript 直接將其等同於新的 JS 對象來訪問它?

早些時候我曾經在硬盤上有這樣的數據格式

var data12 = {

"route":[
{
    "ip": "some ip",

    "longitude": "some lng",

    "latitude": "some lat",

.....

在我的 javascript 中它被用作

data=data12.route;

然后簡單地將成員作為 data[1].latitude 訪問

我建議使用jQuery 庫 縮小版只有 31 kB 大小,並提供了許多有用的功能。

要解析 JSON,只需執行

var obj = jQuery.parseJSON ( ' {"name" : "John"} ' );

您現在可以輕松訪問所有內容:

alert ( obj.name );

注意:jQuery 使用瀏覽器的本機 JSON 解析器 - 如果可用 - 這比使用eval ()方法非常快速且安全。

編輯:要從服務器端獲取數據到客戶端,有兩種可能:

1.) 使用 AJAX 請求(使用 jQuery 非常簡單):

   $.ajax ( {
       url: "yourscript.php",
       dataType: "json",
       success: function ( data, textStatus, jqXHR ) {
           // process the data, you only need the "data" argument
           // jQuery will automatically parse the JSON for you!
       }
   } );

2.) 在頁面生成時將 JSON 對象寫入 Javascript 源代碼:

   <?php
       $json = json_encode ( $your_array, JSON_FORCE_OBJECT );
   ?>

   <script src="http://code.jquery.com/jquery.min.js" type="text/javascript"></script>

   <script type="text/javascript">
   //<![CDATA[

   var json_obj = jQuery.parseJSON ( ' + <?php echo $json; ?> + ' );

   //]]>
   </script>

我知道這是舊的,但我最近發現自己在尋找這個。 這里的答案都不適用於我的情況,因為我的值中有引號。 這里的想法是在回顯到頁面之前對數組進行 base64 編碼。 這樣引號就不會沖突了。

< ?php
$names = ['first' => "some'name"];
?>
var names = JSON.parse(atob('< ?php echo base64_encode(json_encode($names)); ?>'));
console.log(names['first']);

我可以使用 PHP 的 json_encode() 從后端獲取 JSON 數組,如下例所示:

<!doctype html>
<html>
    <script type="text/javascript">
        var json = <?php echo json_encode(array(1 => '123', 'abc' => 'abd', 2 => 5));?>;
        console.log(json[1]);
        console.log(json.abc);
    </script>        
</html>

沒有引號意味着打印出來的任何東西的 eval() 。 這是我們經常用來快速向 AJAX 頁面添加初始值的快速技巧。

不需要jquery,只需:

    var array= <?php echo json_encode($array); ?>;
    console.log(array->foo);

我們必須在 javascript 中顯示 json 編碼格式,使用以下之一:

var responseNew = JSON.parse(' {"name" : "John"} ' );
alert(responseNew['name']);

我猜這個功能對你有用:

    function json_encode4js($data) {
    $result = '{';
    $separator = '';
    $count = 0;
    foreach ($data as $key => $val) {

        $result .= $separator . $key . ':';
        if (is_array($val)){
            $result .= json_encode4js($val).(!$separator && count($data) != $count ? ",":"");
            continue;
        }
        if (is_int($val)) {
            $result .= $val;
        } elseif (is_string($val)) {
            $result .= '"' . str_replace('"', '\"', $val) . '"';
        } elseif (is_bool($val)) {
            $result .= $val ? 'true' : 'false';
        } elseif (is_null($val)) {
            $result .= 'null';
        } else {
            $result .= $val;
        }

        $separator = ', ';
        $count++;
    }

    $result .= '}';

    return $result;
}

$a = array(
"string"=>'text',
'jsobj'=>[
    "string"=>'text',
    'jsobj'=>'text2',
    "bool"=>false
    ],
"bool"=>false);

var_dump( json_encode4js($a) ); //output: string(77) "{string:"text", jsobj:{string:"text", jsobj:"text2", bool:false}, bool:false}" 

var_dump( json_encode($a));//output: string(85) "{"string":"text","jsobj":{"string":"text","jsobj":"text2","bool":false},"bool":false}"

HTML

<select name="sub" id="subcat" class="form-control" required="required">

</select>

PHP

$this->load->model('MainModel');
$subvalue = $this->MainModel->loadSubData($var);
echo json_encode($subvalue);
//if MVC
// or you can just output your SQLi data to json_encode()

JS

$("#maincat").change(function(){
  var status = this.value;

  $.ajax({
    type: 'POST',
    url: 'home/subcat/'+status,
    success: function(data){
        var option = '';
        var obj = JSON.parse(data);
        if(obj.length > 0){
            for (var i=0;i<obj.length;i++){
            option += '<option value="'+ obj[i].id + '">' + obj[i].name + '</option>';  
            }
            //Now populate the second dropdown i.e "Sub Category"
            $('#subcat').children("option").remove();
            $('#subcat').append(option);
        }else{
            option = '<option value="">No Sub Category Found</option>';
            $('#subcat').children("option").remove();
            $('#subcat').append(option);
        }       
    },
    error: function(){
    alert('failure');
    }
});

暫無
暫無

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

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