2013-04-28 78 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

相關問題