2011-06-29 15 views
1

同じドメイン内のcfcにアクセスするためにgetJSONを使用しているページがあります。すべてが開発サーバー上で正常に動作しますが、ライブでは動作しません。他のjqueryは、.getJSON呼び出しではなく、うまく実行されます。 Webからもいくつかの例を試してみましたが、getJSONの代わりにajaxを使用しましたが、結果は常に同じです。テストではなく、ライブではありません。jquery cfcへのgetJSON呼び出しは、テストサーバー上で動作しますが、ライブではありません。

私が現在テストしているコードは、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.04と表示されています。余分なスラッシュはどういう意味ですか?

+0

どのブラウザでこれを試しましたか?また、あなたはフィドラーとのリクエストをチェックして、レスポンスが何であるかを見ていますか? –

+1

ブラウザにurlディレクトリを貼り付けて、応答として正確に返されるものを確認してください。 http:// [yourdomain] /jsonTest/mycfc.cfc?method=chkUsername&username= [username]&returnformat = json –

答えて

4

ライブサーバーでColdFusionの「secureJson」機能が有効になっている可能性は非常に高いです。これは、JSONの前に2つのスラッシュをデフォルトで置くことでJSONの出力を保護します。 JSONにアクセスしようとしている他のソースにはJavaScriptのコメント(//)しか表示されませんが、ColdFusionはその機能が有効であることを知っているので、スラッシュを削除してから使用します。

Application.cfc(this.secureJson = false)、Application.cfm(<cfapplication ... secureJson="false" />)、またはcffunctionタグ(<cffunction ... secureJson="false">)の機能レベルで無効にすることができます。 CF管理者にはサーバー全体の設定もあります。ほとんどの場合、テスト環境ではこれを無効にしていますが、運用環境では有効にしている可能性があります。

+0

ああ、ありがとうそんなに!私はそれが設定であることを知らなかった。私が読んだことから、cfajaxproxyを使うと、返されたデータから接頭辞を自動的に削除しますが、クロスドメインを実行できる必要があるため、代わりに.getJSONを使用しています。要求。私はあなたがcfajaxproxyを使用していない場合、それを解析する前にjSONからプレフィックスを削除することができますが、それを行う方法についての説明は何もないことを述べました。思考? –

+0

返されたJSONから最初の2文字を差し引いた部分文字列を取得し、これをJSON文字列として使用します。 –

+0

それは私がよく分からない部分です。私は関数(isUsernameUnique)呼び出しの前にそれを行うのですか?その機能の中で私がしようとする操作は決して実行されません。追加情報をありがとう。 –

0

実動CFサーバーでsecureJSONが有効になっています。本番環境ではそれを無効にする代わりに、開発サーバーを更新してコードに合わせてビルドします。少し余分なセキュリティが誰にも決して傷つけることはない、IMO。

+0

ありがとうございました、それは確かに問題でした。 –

関連する問題