2012-06-07 56 views
0

我想知道是否有經驗的人使用Sammy.js有解決方案使用跨源資源共享?如何CORS Sammy.js?

編輯

原來的問題是基本上是要求什麼辦法的人可能已經習慣了使用完成Sammy.js,像overiding的.load()方法或類似的東西CORS。

我遇到的問題是,當使用.load()方法嘗試與位於不同域(啓用CORS的sinatra應用程序)上的Sinatra API進行交互時,事情無法按預期工作。

如果我使用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); 
     }); 
     } 
    }); 
}); 

...螢火顯示在控制檯中的項目/職位,但如果我用.load,如:

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

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

.. 。一切都不好,螢火蟲控制檯顯示http://pastie.org/4051256雖然螢火蟲也表明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()); 
    }); 
}); 

...牢記回報只有三個職位的JSON數組,模板越來越裝成功,但沒有任何數據注入以及其被呈現的次數相同數量的上述pastie :(

EDIT「未定義」線的數量2

sammy.js中的.load方法如何將此調用與jQuery ajax調用區別對待?

爲什麼會出現上述問題?

+0

您可以改進問題,使其更具體嗎?你在尋找什麼類型的幫助? – monsur

+0

這是一些優秀的背景,並有重大的改進。你能否最後給我們提出一個具體問題,而不是一系列帶有一些問號的陳述?你是否要求解釋這種行爲,一種針對具體情況做某些事情的方式......什麼? –

回答

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網站上的例子的原因。