2011-10-20 37 views
1

當我從本地主機檢索數據作爲JSON時,一切正常。當我嘗試從遠程機器獲取JSON數據時,一切都可以。我可以解析JSON數據從我的本地主機到對象(一個數據網格插件:jqgrid呈現它)。但是,當我嘗試使用遠程源時,它不會。在螢火蟲它說200 OK,但它顯示一個錯誤圖標,並寫入紅色。我檢查我的本地和遠程連接頭的區別,我發現沒有該頭在遠程連接:缺少X-Requested-With:XMLHttpRequest(導致200 OK但顯示爲錯誤?)

X-Requested-With XMLHttpRequest 

我想問題可能是。我沒有設置它,它運行良好。它發生在遠程請求。

任何想法來解決它?

PS:我試着設置阿賈克斯頭,但沒有奏效:

$.ajaxSetup({ 
      headers: {"X-Requested-With":"XMLHttpRequest"} 
    }); 

    $("#userTable").jqGrid({ 
     url:'http://xx.xx.x.xxx:8080/aa/bb/cc/user', 
     colNames:['User Name','Password'], 
     colModel:[ 
      {name:'userName',index:'userName', width:100}, 
      {name:'password',index:'password', width:55} 
     ], 
     jsonReader: ... 
     ... 
    }); 

當我使用的設置我甚至不能看到螢火蟲的GET請求。

PS:我使用Spring 3與REST和Tomcat作爲Web服務器。

+0

看看[這裏](http://jpgmr.wordpress.com/2010/07/28/tutorial-implementing-a-servlet-filter-for-jsonp-callback-with-springs-delegatingfilterproxy/)如果你需要在Spring中實現JSONP。 – Oleg

回答

0

我認爲你有Cross-site scripting問題。如果服務器在響應的HTTP標頭中設置了一些additional options,則可以解決該問題。因此,解決方案不像您目前那樣修改客戶端代碼,而是在服務器代碼中進行修改。

我推薦你檢查HTTP選項,它將在the demo中使用的tables.googlelabs.comthe answer中設置。你會看到,服務器的響應具有以下附加HTTP選項:

X-Content-Type-Options: nosniff 
X-Frame-Options: SAMEORIGIN 
X-XSS-Protection: 1; mode=block 

和JSON響應將被放置在由jsonCallback參數定義的函數的調用內。如果你使用jsonCallback=? jqGrid會生成函數的名字(類似於jQuery16407707202236448429_1319101394784)。你可以閱讀更多關於X-XSS-Protection選項here和約X-Content-Type-Options: nosniff選項here

如何在the demo中看到數據將顯示在jqGrid中,因此跨站點腳本可以在jqGrid中實現。

因爲我們所說的服務器tables.googlelabs.com,它不支持的jqGrid分頁和排序參數,我在演示

url: 'http://tables.googlelabs.com/api/query?jsonCallback=?', 
postData: "sql=" + encodeURIComponent("SELECT * FROM 333136 LIMIT 10") 

字符串,而不是對象作爲postData值的使用將覆蓋任何其他jqGrid的使用通常發佈的參數。在你的情況下,這將不需要這樣做,可能你只需要使用url: 'http://xx.xx.x.xxx:8080/aa/bb/cc/user?jsonCallback=?'

以任何方式您需要在您的服務器上實現對JSONP的支持。這意味着服務器應該「瞭解」jsonCallback參數。實現取決於你的服務器端實現。在WCF服務的情況下,它可能只是crossDomainScriptAccessEnabled="true"webHttpBinding綁定設置(請參閱hereweb.config的示例)。另請參閱this answerthis one(或this one)另外用於ASP.NET Web服務和ASP.NET MVC。

相關問題