2011-06-29 39 views
1

我有一個使用getJSON訪問同一域中的cfc的頁面。一切工作正常在開發服務器上,但不是在現場。其他jquery執行得很好,只是不是.getJSON調用。我也嘗試過來自網絡的幾個例子,並使用Ajax代替getJSON,但結果總是相同的 - 測試精確,而不是實況。jquery getJSON調用cfc在測試服務器上工作,但不生活

這是我目前用來測試的代碼,它是http://www.christopherchin.com/blog/index.cfm/2010/3/25/HELP-CFCjqueryJSON示例的簡化版本。


index.cfm:

<script type="text/javascript" src="http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js"></script> 
<script type="text/javascript"> 
chkUsernameUnique = function(theUsername){ 
    $.getJSON("/jsonTest/mycfc.cfc", { 
    method: 'chkUsername', 
    Username: theUsername, 
    returnformat: 'json' 
    }, function(isUsernameUnique){ 
     $("#theErrorDivID").html(isUsernameUnique); 
    }); 
}; 
</script> 

<input type="text" name="username" id="username" onchange="chkUsernameUnique(this.value);" /> 

<div id="theErrorDivID"></div> 

mycfc.cfc:

<cfcomponent> 
<cffunction name="chkUsername" access="remote" returnformat="json" output="false"> 
    <cfargument name="Username" required="true"> 

    <cfset thisRecordCount=4> 

    <cfreturn thisRecordCount> 
</cffunction> 
</cfcomponent> 

忽略一個事實,即它不會做任何有用的事情,這是純粹的供測試用。在測試服務器上,它會做它應該做的事情,如果我在框中鍵入內容,則顯示4。在肝臟服務器上,它實際上並沒有發生錯誤,瀏覽器顯示javascript正在驗證,但沒有任何反應。在這一點上,我認爲它可能是服務器或ColdFusion管理中的一個設置,而不是與代碼有關的任何事情,但我甚至不知道從哪裏開始。任何幫助將非常感激。


更新:我現在看到在螢火蟲在測試服務器上的響應是4.0,但在實時服務器上它是//4.0。額外的斜槓是什麼意思?

+0

哪些瀏覽器你試過這個?也有你檢查與提琴手的請求,看看有什麼迴應? –

+1

嘗試在瀏覽器上粘貼url目錄,看看究竟返回什麼作爲迴應 http:// [yourdomain] /jsonTest/mycfc.cfc?method=chkUsername&username= [用戶名]&returnformat = json –

回答

4

您很可能在活動服務器上啓用了ColdFusion的「secureJson」功能。它所做的是通過在JSON前面放置兩個正斜槓來保護JSON輸出。試圖訪問JSON的其他來源將只能看到一個Javascript註釋(//),而知道啓用該功能的ColdFusion將刪除斜槓然後使用它。

您可以在Application.cfc(this.secureJson = false),Application.cfm(<cfapplication ... secureJson="false" />)或cffunction標記(<cffunction ... secureJson="false">)中的函數級別關閉它。在CF管理員中還有一個服務器範圍的設置。您很可能在測試環境中關閉了此功能,但在生產環境中打開了此功能。

+0

啊,你完全正確,謝謝非常!我不知道這是一個設置。接下來的問題是:從我讀過的內容看,使用cfajaxproxy會自動處理從返回的數據中刪除前綴,但我一直使用.getJSON,因爲我需要能夠執行跨域請求。我已經閱讀了幾件事情,提到你可以在解析之前自己從jSON中刪除前綴,如果你不使用cfajaxproxy,但沒有解釋如何做到這一點。思考? –

+0

獲取返回的JSON的子字符串減去前兩個字符並將其用作JSON字符串。 –

+0

這是我不確定的部分。在函數(isUsernameUnique)調用之前,我該如何做?我在該函數中嘗試執行的任何操作都不會執行。感謝您的任何其他信息。 –

0

您的生產CF服務器上啓用了secureJSON。與其在生產中關閉它,我會更新我的開發服務器以匹配它,並在代碼中爲它構建。一點額外的安全性從不會傷害任何人,IMO。

+0

非常感謝,確實是這個問題。 –

相關問題