2012-01-25 5 views
1

jsonデータからイベントカレンダーを取得しようとしています。私はちょうど日付を強調表示し、ユーザーが日付をクリックすると、イベントの詳細とカレンダーの下にdivの更新をしたい。私のアプリは、フォームでJSONを提供しています:JSONデータをプルする

[ 
    {"Date":"02/06/2012","Title":"Eat, Bike, and Swim"}, 
    {"Date":"02/03/2012","Title":"Sleep"}, 
    {"Date":"02/02/2012","Title":"Laugh"} 
] 

私は変数の定義で動作しますが、私はそれがJSONリクエストに応答することができませんJSのフィドルを持っています。ここで

は私の最高の試みです:http://jsfiddle.net/PGmFv/2/

ジャバスクリプトは次のようになります。

 
$(document).ready(function() { 
    var dp, events; 
    events = []; 
    return dp = $(".blog_calendar").datepicker({ 
    beforeShowDay: function(date) { 
     var matching, result; 
     $.getJSON("https://raw.github.com/gist/1676157/15ce81851e57dfcecb985039e970a749585959de/my.json", function(data) { 
     return events = data; 
     }); 
     result = [true, "", null]; 
     matching = $.grep(events, function(event) { 
     return event.Date.valueOf() === date.valueOf(); 
     }); 
     if (matching.length) { 
     result = [true, "highlight", null]; 
     } 
     return result; 
    }, 
    onSelect: function(dateText) { 
     var date, event, i, selectedDate; 
     date = void 0; 
     selectedDate = new Date(dateText); 
     i = 0; 
     event = null; 
     while (i < events.length && !event) { 
     date = events[i].Date; 
     if (selectedDate.valueOf() === date.valueOf()) { 
      event = events[i]; 
     } 
     i++; 
     } 
     if (event) { 
     return alert(event.Title); 
     } 
    } 
    }); 
}); 

私は上の複数のカレンダーを持つことができるようにしたいので、私はDatePickerの関数内JSONをロードしようとしています同じページとthis.idには特定のURL変数が含まれていますので、私は電話することができます$.getJSON('/events/' + this.id + '/data.json',function() {}

私は大幅に傾いています:Events in jQuery UI Datepicker with json data sourceDatepicker with events?しかし、ちょうど適切な時間と正しい方法でロードするjsonを得ることができません。

コンソールでエラーが発生していないことは役に立ちません。

答えて

6

JSONデータを別のドメインから取得するには、JSONPをコールバック関数で使用する必要があります。 Github APIはこれをサポートしており(example)、jQueryはdataType: 'jsonp'で自動的にコールバックを処理します。

これは私がjQueryを使ってのGithubの要旨からJSONデータを取得する方法である:

$.ajax({ 
    url: 'https://api.github.com/gists/'+gistid, 
    type: 'GET', 
    dataType: 'jsonp' 
}).success(function(gistdata) { 
    // This can be less complicated if you know the gist file name 
    var objects = []; 
    for (file in gistdata.data.files) { 
    if (gistdata.data.files.hasOwnProperty(file)) { 
     var o = JSON.parse(gistdata.data.files[file].content); 
     if (o) { 
     objects.push(o); 
     } 
    } 
    } 
    if (objects.length > 0) { 
    // DoSomethingWith(objects[0]) 
    } 
}).error(function(e) { 
    // ajax error 
}); 

jsFiddle

1

非常に多くのコードを掘り下げていますが、非同期呼び出しを行い、匿名関数から値を返そうとしていませんか? の開始直後にeventsを使用しようとしています。の前にのデータが実際にフェッチされていますか?

+0

今、これは理にかなって、私はそれを修正するかどうかはわかりません。私は同じページに複数のカレンダーを配置し、カレンダーのdivに固有のIDを要求することができるので、datepicker関数のjsonデータをプルする必要があります – bonhoffer

+0

私はあなたの提案に基づいてこのようなものを試していますが、まだ動作していません:http ://jsfiddle.net/PGmFv/12/ – bonhoffer

0

要求

$.getJSON("https://raw.github.com/gist/1676157/15ce81851e57dfcecb985039e970a749585959de/my.json") 

が(同じdomain.Soのはconsole.logではないため、このエラーは)来ているが$ .getJSON( '同じドメインリクエスト' を実行

Origin http://fiddle.jshell.net is not allowed by Access-Control-Allow-Origin. 

このエラーを示します)エラーは発生しません。

フィドルを参照し、コンソールエラーメッセージを参照してください。 http://jsfiddle.net/PGmFv/10/

+0

ありがとう、と感謝 - 私はそれを見た - どのようにjsfiddleにJSONを取得するか分からない。より大きな問題はリクエストそのものです。 – bonhoffer

関連する問題