2012-04-10 206 views
2

我有一個簡單的骨幹應用程序,它有struts控制器作爲其後端,它工作正常。然後我試圖包括跨域請求處理邏輯,我才知道,有2種方式,使跨域請求JSONP骨幹js

  1. JSONP
  2. CORS

現在我想要做的是,如果瀏覽器不支持CORS ..那麼我將不得不提出JSONP請求。我完成了CORS(只是使用過濾器添加頭文件),這部分工作正常,但我無法成功完成JSONP請求。

我對此的問題是:

  1. 什麼應該從服務器的響應(Struts控制器)是什麼?它是否會返回類似函數調用的內容?截至目前它正在返回模型。

  2. 在Backbone js中,僅覆蓋Backbone.sync使其數據類型爲JSONP就足夠了?

注:我發現了以下錯誤我JSONP電話:

Error: jsonpCallback was not called

代碼:我overrided我在同步採集。我的同步功能是

sync: function(method, model, options) {    
     options.dataType = 'jsonp'; 
     options.url="http://localhost:8084/CrossDomain_backbone/messages.json";   
     //options.contentType='application/json-p'; 
     options.error=this.errorr; 
     return Backbone.sync(method, model, options); 
    } 
    , 
    parse: function(resp){ 
     alert('inside parse..'); 
     return resp.model; 
    }, 
    errorr:function(response,responseText) 
    { 
     alert('inside callback..: ' + responseText); 
    }, 

謝謝。

回答

2

您的Struts代碼將需要返回包含數據的函數調用。

URL請求可能是這個樣子:

options.url="http://localhost:8084/CrossDomain_backbone/messages.json?callback=?"; 

查詢字符串的一部分callback會自動與你的Struts代碼需要使用隨機函數名稱所取代。

例如,JSONP請求時,jQuery的(由骨幹使用)可能是這樣的:

http://localhost:8084/CrossDomain_backbone/messages.json?callback=jQuery17205394351207651198_1336231056100 

所以,你的Struts代碼將讀取回調參數和排放的JavaScript是這樣的:

jQuery17205394351207651198_1336231056100({ 
    "name": "Henry T Ford", 
    "company": "Ford Motor Company", 
    "modified": "2012-04-05T15:06:36Z"}); 

jQuery處理創建一個具有該隨機名稱的臨時函數來接收響應並將其傳遞給定義的成功方法。