0

Sammy.jsの使用経験がある人が、クロスオリジンリソースシェアリングを使用するためのソリューションを持っているかどうか疑問に思いました。

編集

元々の質問は、基本的に、.load()メソッドなどをオーバーライドするなど、Sammy.jsを使用してCORSを達成するために人々がどのようなアプローチを使用したかを尋ねることでした。

私が抱えている問題は、異なるドメイン(CORS対応のsinatraアプリ)にあるSinatra apiと対話しようとしているときに.load()メソッドを使用すると、期待どおりに機能しないことです。

次のようなAjax呼び出しを使用する場合:

this.get('#/', function(context) {
    $.ajax({
      url: 'http://localhost:4567/posts', //located on other domain
      dataType: 'json',
      success: function(items) {
        $.each(items, function(i, item) {
          context.log(item.title);
        });
      }
    });
});

... firebugはコンソールにアイテム/投稿を表示しますが、.loadを使用すると、次のようになります。

this.load('http://localhost:4567/posts')

.then(function(items) {
   $.each(items, function(i, item) {
        context.log(item.title);
   });
});

...すべてがうまくいかず、firebugコンソールにはhttp://pastie.org/4051256が表示されますが、firebugは投稿のjson配列が正常に取得されたことも示しています。

この動作は、ログを記録する代わりに、テンプレートでアイテムをレンダリングしようとした場合にも発生します。

this.load('http://localhost:4567/posts')
.then(function(items) {
   $.each(items, function(i, item) {
     context.render('tmpl/item.mustache', {item: item})
     .appendTo(context.$element());
   });
 });

...戻り値が3つの投稿のみのjson配列であることを念頭に置いて、テンプレートは正常に読み込まれていますが、データが挿入されておらず、上記のパスティの「未定義」行の数と同じ回数レンダリングされています:(

編集2

sammy.jsの.loadメソッドは、この呼び出しをjquery ajax呼び出しとは異なる方法で処理しますか?

また

上記の問題が発生しているのはなぜですか?

4

1 に答える 1

0

予想される応答タイプをリクエストに追加する必要があります。そうしないと、レスポンスは文字列としてインポートされますが、Firebug では配列/オブジェクトのように見えます。標準の jQuery アプローチが機能するのは、既にそれを行っているためです。

dataType: 'json',

.load() メソッドを使用すると、予想される応答タイプを次のように指定できます。

this.load('http://localhost:4567/posts', {dataType: 'json'})

またはこのように:

this.load('http://localhost:4567/posts', {json: true})

リソースの URL の名前に「json」が含まれている場合、sammy.js は予期される応答タイプを自動的に JSON に設定します。これが、sammy.js の Web サイトの例が機能する理由でもあります。

于 2012-08-07T00:52:24.800 に答える