[英]What is the difference between these two ways of returning a JSON object?
我正在使用jQuery Week Calendar,並試圖使其正常工作,但是我不知道為什么這會引發錯誤。
日歷具有一種返回事件列表以填充自身的方法。
該方法(出於演示目的使用預設事件)如下所示:
function getEventData() {
var year = new Date().getFullYear();
var month = new Date().getMonth();
var day = new Date().getDate();
return {
events : [
{
"id":1,
"start": new Date(year, month, day, 12),
"end": new Date(year, month, day, 13, 30),
"title":"Lunch with Mike"
},
...
{
"id":6,
"start": new Date(year, month, day, 10),
"end": new Date(year, month, day, 11),
"title":"I am read-only",
readOnly : true
}
]
};
}
我對其進行了更改,以便它使用jQuery GET到另一個返回實際日期列表的頁面。 為了進行測試,我保留了相同的測試數據,只是看帖子是否做得正確。
該方法將調用該頁面,並將在responseText
屬性中返回該頁面。
{
events : [
{
'id':1,
'start': new Date(2010, 2, 22, 12),
'end': new Date(2010, 2, 22, 13, 30),
'title':'Lunch with Mike'
},
...
{
'id':6,
'start': new Date(2010, 2, 28, 10),
'end': new Date(2010, 2, 28, 11),
'title':'I am read-only',
readOnly : true
}
]
}
我缺少的兩種方法之間有區別嗎? 對我來說,這兩個對象看起來完全一樣,除了第二個對象使用'而不是',因為它是通過C#編寫的,並且不使用年/月/日變量。
問題是第二種方法拋出一個錯誤,說“ G is undefined”,是否有任何原因導致jQuery不喜歡我要返回的JSON對象?
編輯:我想我找到了錯誤的來源。 在其中一種方法中,有一個if語句,如下所示:
if (typeof options.data == 'string') {
if (options.loading) options.loading(true);
var jsonOptions = {};
jsonOptions[options.startParam || 'start'] = Math.round(weekStartDate.getTime() / 1000);
jsonOptions[options.endParam || 'end'] = Math.round(weekEndDate.getTime() / 1000);
$.getJSON(options.data, jsonOptions, function(data) {
self._renderEvents(data, $weekDayColumns);
if (options.loading) options.loading(false);
});
}
else if ($.isFunction(options.data)) {
options.data(weekStartDate, weekEndDate,
function(data) {
self._renderEvents(data, $weekDayColumns);
});
}
當僅在getEventData()中輸出JSON對象(第一種方法)時,它會擊中else語句,因為它被識別為一個函數(我猜是),但是當我執行ajax GET時,它被認為是一個字符串並進入如果。
反正有沒有得到這個公認的功能? 我嘗試將返回值括在大括號中,將dataType更改為script,並使用eval()將結果轉換為函數,但這些似乎都不起作用。
您是否也嘗試過將事件包含在引號中?
'事件':[....
將您的響應文本放入JSON驗證器中 ,看看問題出在哪里。
還要注意,將new Date(2010, 2, 28, 10)
直接輸出到文本中被認為是不好的做法,而是使用實際值,然后使用JS在客戶端解析它們。 (我相信這是最明顯的錯誤,只要您不使用eval
來解析JSON字符串即可:))
從jQuery 1.4.0開始,該庫對JSON的格式非常嚴格 (您的JSON文本缺少鍵的引號)
在搜索完Google之后,我遇到了jQuery Week Calendar Google Group , 該討論與我遇到的問題完全相同。
我認為主要問題是DateTimes格式不正確。 返回事件JSON對象可以直接正確地轉換日期,但是我的ajax調用返回的是new Date(2010, 02, 23, 12)
作為時間。 它導致它無聲地失敗。 將日期時間更改為類似2010-02-23T12:15:00.000+10:00
似乎已經解決了。
但是,該用戶確實對events : [
不正確events : [
破壞了JSON。 我把它留在了ajax調用中,它仍然可以正常工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.