2013-04-28 147 views
0

我需要从PHP获取一些Json数据到jquery。使用Jquery将php字符串数据转换为Json对象

我需要JavaScript方法中的以下格式。

function returnJson() 
{ 
    return { 
      events: [ 
      { 
       "id": 1, 
       "start": new Date(2013, 4, 26, 12), 
       "end": new Date(2013, 4, 26, 13, 30), 
       "title": "Lunch with Mike" 
      }, 
      { 
       "id": 2, 
       "start": new Date(2013, 4, 27, 14), 
       "end": new Date(2013,4, 27, 14, 45), 
       "title": "Dev Meeting" 
      }] 
     }; 
} 

对于这个我做下面的事情在javascript:

在PHP
function returnJson() 
{ 
    var eventResult = $.getJSON("../PHP/PhpAction.php?f=fetchCalendarEvent"); 
    return eventResult; 
} 

function fetchCalendarEvent() 
      { 
       $tablename = "tb_calendar"; 

       $sql = "SELECT eventId,userId,enentName,eventText,EXTRACT(YEAR FROM startTime) AS startyear,EXTRACT(MONTH FROM startTime) AS startMonth,EXTRACT(DAY FROM startTime) AS startDay,EXTRACT(HOUR FROM startTime) AS startHour,EXTRACT(MINUTE FROM startTime) AS startMin,EXTRACT(YEAR FROM endTime) AS endyear,EXTRACT(MONTH FROM endTime) AS endMonth,EXTRACT(DAY FROM endTime) AS endDay,EXTRACT(HOUR FROM endTime) AS e`enter code here`ndHour,EXTRACT(MINUTE FROM endTime) AS endMin FROM ".$tablename." WHERE userId='".$_SESSION['userid']."' AND isActive=1"; 

         $q = mysql_query($sql); 
         $i=1;   
         $eventData="{events: ["; 

         if (!mysql_num_rows($q)) { 
          echo 'No records found'; 
         } 
         else 
         {           
          while ($row = mysql_fetch_assoc($q)) { 

           $eventData.="{'id':".$row['eventId'].","; 


           $eventData.="'end': new Date(".$row['startyear'].",".$row['startMonth'].",".$row['startDay']."," .$row['startHour'].",".$row['startMin']."),"; 

           $eventData.="'start': new Date(".$row['endyear'].",".$row['endMonth'].",".$row['endDay'].",".$row['endHour'].",".$row['endMin']."),"; 

           $eventData.="'title':'".$row['enentName']."'},"; 

           $i++; 
          }     
         } 
         $eventData= rtrim($eventData, ","); 

         $eventData.="]}"; 
         echo json_decode($eventData); 
      } 

我检查的萤火php的方法返回的数据,如:

{ events: [ { 
     'id': 2, 
     'end': new Date(2013, 4, 27, 18, 38), 
     'start': new Date(2013, 4, 27, 18, 38), 
     'title': 'test' 
    }, { 
     'id': 3, 
     'end': new Date(2013, 4, 23, 11, 0), 
     'start': new Date(2013, 4, 23, 14, 15), 
     'title': 'testing23' 
    } 
] } 

任何人都可以请 帮我。我是新的PHP。任何帮助将不胜感激。

+0

可能你的web服务器确实返回了JSON的错误html头文件。也许你应该使用'jQuery.ajax()' - 它有更多的选项来“调整”... – rantanplan 2013-04-28 12:34:41

+0

将数据存储在关联数组中并对其运行json_encode()。 – powerbuoy 2013-04-28 12:35:13

+0

对不起,它也无法正常工作..我认为我的代码中有一些主要问题。 – 2013-04-28 12:37:58

回答

5

Php有一个称为json_encode的函数,它将处理json输出的生成。

下面是一个例子:

$o = array(); 
$o['events'] = array(); 
while ($row = mysql_fetch_assoc($q)) 
{ 
    $event = array(); 
    $event['id'] = $row['id']; 
    $event['start'] = "new Date(".$row['startyear'].",".$row['startMonth'].",".$row['startDay']."," .$row['startHour'].",".$row['startMin'].")"; 
    $event['end'] = "new Date(".$row['endyear'].",".$row['endMonth'].",".$row['endDay'].",".$row['endHour'].",".$row['endMin'].")"; 
    $event['title'] = $row['title']; 

    $o['events'][] = $event; 
} 

return json_encode($o); 

而且javscript代码可能是这样的:

function returnJson() 
{ 
    var events = $.getJSON("../PHP/PhpAction.php?f=fetchCalendarEvent"); 

    for (var i = 0; i < events.length; i++) { 
     var event = events[i]; 
     event.start = eval(event.start); 
     event.end = eval(event.end); 

     events[i] = event; 
    } 

    return events; 
} 
+0

感谢您的代码。但在这种情况下,ID和标题是好的。但它如何处理开始和结束日期?因为在那种情况下,我需要新的日期(2013,4,26,12),并且没有起始行。我有不同的月份,年份,日期,分钟和小时。 – 2013-04-28 12:44:44

+1

那么如果你用“新日期()”格式发送日期,它将被解释为文本。所以相反,我会将日期转换为时间戳,然后再次在JavaScript端,我会将它转换为日期,如下所示:“var date = new Date(timestamp * 1000);”它乘以1000,因为JS以毫秒为单位工作。 – 2013-04-28 13:04:17

+0

我有一个JavaScript函数返回数据。 功能是 function getEventData(){ return {events:[{“id”:2,“start”:new Date(2013,4,24,12,0),“end”:new Date( 2013,4,24,11,0),“title”:“test”}]}; } 它的正常工作,当我写类似于上面的函数(铁杆数据) 当我使用一些变量,然后它不工作.. 在警报相同的数据是coming.If我只是复制警报数据并粘贴返回它工作正常。 – 2013-04-28 18:03:36

0

发送AJAX数据到浏览器时,应添加适当的标题和MIME类型:

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 

下面是关于如何使用发送给浏览器的数据的一些示例代码:

function requestData() { 
     $.ajax({ 
      url: url, 
      dataType: 'json', 
      success: function(json) { 
       events = json.events; 

       useData(events); 
      }, 
      error: function (xhr, status, error) { 
       alert('Status: ' + status +' Error: ' + error); 
      } 
     }); 
    } 

错误信息在你的案例中说了什么?

0

你可以在JSON格式不日期对象。一个选项是使用时间戳并在解析json时将其转换。

如果你检查http://jsonlint.com/你会看到你的json给出错误。

您的语法是Javascript对象表示法,不是JSON表示法。 Javascript可以使用json.stringify函数生成json。

我只是双重检查,如果你的字符串化JavaScript对象下面的转换将发生:

var date = new Date(2013, 4, 26, 12); 
var string = JSON.stringify(date); 
console.log(string); 
//output = 2013-05-26T10:00:00.000Z 
console.log(JSON.parse(string)); 
//will again output 2013-05-26T10:00:00.000Z 

所以,你可以约会对象转换为字符串JSON.stringify。但是你不能将它们格式化回Date对象。

0
$data = preg_replace('@new Date\(([^\)]*)\)@', '"$1"', $data); 
$data = json_decode($data, true); 

结果:

新日期(2008,3,30,0,31,26)=> “2008,3,30,0,31,26”

+0

浪费时间...... OP半年以上无效......'最后一次看到4月23日16:30' – Legionar 2015-11-06 12:21:54

相关问题