2013-03-19 30 views
5

我有一個應用程序,我正在從CF8轉換爲CF10和我的一些遠程CFC返回的數據應該是JSON,現在失敗了,因爲似乎有一個「//」預先寫入返回的數據。比如這裏有一個返回結構的輸出:Coldfusion 10 returnformat =「JSON」添加字符

//{"SUCCESS":true,"ERRORS":[],"DATA":{"COLUMNS":["AUTHRESULT","SPID","EMAIL","RID"],"DATA":[[true,361541,"[email protected]",""]]}} 

通過相同的CFC的CF8服務器上運行相同的函數給出:

{"ERRORS":[],"SUCCESS":true,"DATA":{"COLUMNS":["AUTHRESULT","SPID","EMAIL","RID"],"DATA":[[true,361541,"[email protected]",""]]}} 

的CFC來代理所有請求確實有returnFormat =「JSON 「 - 但是在proxyCFC或從proxyCFC擴展的CFC中沒有調用SerializeJSON()。

我不知道什麼是處理這個問題的最佳方法。在響應中刪除'//'是可能的,但它看起來並不「正確」。因爲這些函數不僅在我們的應用程序中使用,而且還在一些遠程應用程序中使用(有些是通過http://文章,有些是通過jQuery Ajax調用),所以我需要在CF10端處理它。

回答

9

這是ColdFusion admin, under settings中的服務器端設置。 前綴序列化的JSON與。它默認啓用安全性。 保護Web服務,該服務通過在自定義前綴前加序列化的JSON字符串前綴來返回來自跨站腳本攻擊的JSON數據。。也許你已經在ColdFusion 8服務器上關閉了它。我不建議關閉它。

看到這個職位雷蒙德 - 卡姆登 - Handling JSON with prefixes in jQuery and jQueryUI

注:此設置也可以每個應用程序在你的Application.cfc文件中設置secureJSONsecureJSONPrefix設置。請參閱此處的文檔 - Application variables

secureJSON - 一個布爾值,指定是否在ColdFusion函數以JSON格式響應遠程調用而返回的值的前面添加安全前綴。

默認值是在「管理員服務器設置」>「設置」頁面(默認爲false)中前綴序列化JSON設置的值。您可以在cffunction標記中覆蓋此值。

secureJSONPrefix - 安全前綴擺在那的JSON格式的一個ColdFusion函數返回響應遠程調用,如果secureJSON設置爲true值前面。

默認值是在「管理員服務器設置」>「設置」頁面(默認爲//,JavaScript註釋字符)中的前綴序列化JSON設置的值。

+0

有趣 - 沒有意識到這一點。所以這確實需要在調用頁面/應用程序端進行處理,然後才能保證它的安全。 – Steve 2013-03-19 13:59:53

+0

是的,那將是最好的。我做了一些搜索,看起來好像我引用的管理員設置是在ColdFusion 9中首次引入的。我想這解釋了爲什麼你沒有在ColdFusion 8服務器上看到這一點。 – 2013-03-19 14:09:07

+0

還有關於此的一個簡要說明。我花了很多時間試圖讓jquery ajax這方面的工作。起初建議使用帶有dataFilter的ajaxSetup()和一個正則表達式來從JSON響應中移除'//'。經過多次試驗和錯誤,它似乎jquery。validate()會中斷ajaxSetup(),因此dataFitler必須放置在驗證規則的遠程節中。 – Steve 2013-03-20 14:33:07