【问题标题】:how to get data to javascript from php using json_encode?如何使用 json_encode 从 php 获取数据到 javascript?
【发布时间】:2011-11-05 22:34:06
【问题描述】:

我正在尝试将 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 的形式访问成员

【问题讨论】:

    标签: php javascript csv json


    【解决方案1】:

    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');
        }
    });
    

    【讨论】:

      【解决方案2】:

      我知道这是旧的,但我最近发现自己正在寻找它。这里的答案都不适用于我的情况,因为我的价值观中有引号。这里的想法是在回显到页面之前对数组进行 base64 编码。这样引号就不会冲突。

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

      【讨论】:

      • +1 是唯一不使用某些外部库处理可能破坏生成的 JavaScript 字符串的特殊字符的答案。另一种方法是在 PHP 中使用 addcslashes 转义相关字符:var names = JSON.parse('&lt;?php echo addcslashes(json_encode($phpvar),'\'\\'); ?&gt;');
      【解决方案3】:

      我猜这个功能对你有用:

          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}"
      

      【讨论】:

        【解决方案4】:

        我们必须在 javascript 中显示 json 编码格式,使用下面的一个:

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

        【讨论】:

          【解决方案5】:

          不需要jquery,只需:

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

          【讨论】:

            【解决方案6】:

            我可以使用 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 页面添加初始值的快速技巧。

            【讨论】:

            • 这会将变量“json”设置为 json 字符串。海报想要一个 javascript 对象。我想你可能打算去掉引号。如果发布者打算将其用于 AJAX 请求,则此答案也将不适用。
            【解决方案7】:

            我建议使用jQuery library。缩小版只有 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>
            

            【讨论】:

            • 如何将我的 csv 数据输入到 jquery 例程中? Php json_encode 工作吗?另外,如果我有多个要编码的跟踪路由怎么办?
            • 如果您想加载某个动作或事件的数据,您可以简单地使用 AJAX 请求。如果您可以访问网站中的 Javascript 部分以获取 PHP 部分,您还可以将 JSON 对象写入 Javascript 文件。将您的数组放入 PHP 的 json_encode () 函数中,如下所示:$json_obj = json_encode ( $your_array, JSON_FORCE_OBJECT );.
            猜你喜欢
            • 1970-01-01
            • 2017-07-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-06-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多