2014-12-27 51 views
1

我有一个PHP文件的代码从JSON字符串中提取数据返回

[ 
{ 
    "_id": "549f065925e1928098c74275", 
    "index": 0, 
    "guid": "c21b3720-430e-4be3-9309-e8afbabc0020", 
    "email": "[email protected]", 
    "phone": "+1 (804) 417-2615", 
    "address": "657 Temple Court, Katonah, Mississippi, 7139", 
    "about": "Ut laborum ut nostrud dolore ut aute irure aliquip duis. Amet proident fugiat cupidatat nulla ullamco adipisicing ea excepteur. Proident in ullamco aute reprehenderit ea. Consequat non cupidatat id sit nostrud non. Velit amet exercitation incididunt aliqua deserunt cupidatat et ex.\r\n", 
    "registered": "2014-09-05T01:48:12 -03:00", 
    "latitude": -44.882099, 
    "longitude": 24.574332, 
    "tags": [ 
     "officia", 
     "consectetur", 
     "incididunt", 
     "eu", 
     "magna", 
     "esse", 
     "elit" 
    ], 
    "friends": [ 
     { 
      "id": 0, 
      "name": "Billie Jarvis" 
     }, 
     { 
      "id": 1, 
      "name": "Laurie Espinoza" 
     }, 
     { 
      "id": 2, 
      "name": "Kate Stuart" 
     } 
    ], 
    "greeting": "Hello, Browning Riley! You have 6 unread messages.", 
    "favoriteFruit": "banana" 
}, 
{ 
    "_id": "549f065925aa17df2fd6ebea", 
    "index": 1, 
    "guid": "9cf247e8-fe6b-4c42-a4a3-24ef7b907ad4", 
    "email": "[email protected]", 
    "phone": "+1 (946) 506-2141", 
    "address": "414 Willoughby Avenue, Gila, California, 4696", 
    "about": "Aliqua aute tempor veniam sit esse velit anim. Proident amet aliqua ad non labore eu voluptate labore in amet exercitation irure. Qui laborum ea aliqua consectetur minim aliqua amet minim laborum sint fugiat ullamco nulla elit.\r\n", 
    "registered": "2014-02-11T20:29:39 -02:00", 
    "latitude": -19.03677, 
    "longitude": 138.137275, 
    "tags": [ 
     "eu", 
     "non", 
     "et", 
     "nostrud", 
     "enim", 
     "proident", 
     "sint" 
    ], 
    "friends": [ 
     { 
      "id": 0, 
      "name": "Gamble Porter" 
     }, 
     { 
      "id": 1, 
      "name": "Jami Bell" 
     }, 
     { 
      "id": 2, 
      "name": "Mullen Alexander" 
     } 
    ], 
    "greeting": "Hello, Bonita Sharp! You have 5 unread messages.", 
    "favoriteFruit": "strawberry" 
} 
] 

现在试图如下

$("#get").on('click',function(){ 

      $.get('data.php',function(data){ 
       console.log(data); 
       var json_array = data; 
       var new_array = []; 
       $.each(json_array,function(i,o) { 
       new_array.push(o._id); 
       }); 

       console.log(new_array); 

     }); 
    }); 

从这个字符串中提取数据的错误,但这样的结果“操作数a”中的“TypeError:invalid”,你可以在这里看到in this online example。 PHP文件是data.php和代码是在文件的script.js

+0

我真诚地希望那个信息不是真实的人的真实数据! – 2014-12-27 20:31:02

+0

不,它是从这里http://www.json-generator.com/只是随机不是真正的json数据 – 2014-12-27 20:32:00

+2

使用'$ .getJSON'而不是'$ .get'。 – Barmar 2014-12-27 20:32:43

回答

3

您只需要将dataType设置为'json'或使用$.getJSON()即可自动设置数据类型。

这将告诉$.ajax什么期望,并相应地解析它

 $.get('data.php',function(data){ 

       var myarray = data; 
       console.log(myarray); 
       var new_array = []; 
       $.each(myarray,function(i,o) { 
       new_array.push(o._id); 
       }); 

       console.log(new_array); 


      $("#result").text(new_array); 
     },'json');/* last argument is "dataType" */ 

内容头的文件不被发送为application/json

DEMO

+0

伟大的工作非常感谢您的帮助 – 2014-12-27 20:40:04

2

你需要分析你的php回应:
data = JSON.parse(data)
看到这个plunker(7号线进行了更新)

的原因是你在响应中得到一个字符串,那么你需要将它解析为JSON,你可以通过上面的例子来实现。

+1

谢谢我真的很感谢你的帮助,它的工作很棒。 – 2014-12-27 20:44:09

+0

让jQuery在内部进行解析的好处是您无需在无效的json字符串中创建自己的try/catch,而是会触发一个ajax错误回调而不是 – charlietfl 2014-12-27 20:46:11

+0

@charlietfl,您是对的,但它更好了解jquery后面发生了什么(一点点) – vlio20 2014-12-27 20:48:05