0

ばかげた質問がありますが、私は初心者です。extjs4 ライブラリを使用して (ajax 経由で) クロスドメイン リクエストを作成しようとしています。サーバー側の言語として、ColdFusion を使用しています。これまでに書いたコード全体が同じドメインで動作しています。静的ファイル (javascript、css、および html) を分離して Apache サーバーに配置し、動的コンテンツ (cfm、CFC) を Tomcat (openbd) に配置する必要があります。そのため、フロント エンド スクリプト (主に Apache->javascript で) は、コンテンツを取得するために Tomcat でリクエストを作成します。これは間違いなくクロスドメイン リクエストです。

データをプルするために使用しているコード ブロック (CFC) は次のとおりです。

<cfcomponent output="false">
<cfprocessingdirective pageencoding="utf-8">
<cfset setEncoding("URL", "utf-8")>

    <cffunction name="getContent" access="remote" returnFormat="JSON" output="false" >  
        <cfargument name="start" default="0"/>    
        <cfargument name="limit" default="1000"/>
        <cfargument name="id" default="0" required="false" type="numeric">
        <cfargument name="model" default="" required="false" type="any">

        <cfset var arrNomoi = ArrayNew(1)>
        <cfset var stcReturn = "">

        <!--- When going back to base state, ExtJS will make the function call with start set to 0. If this is the case
        we set it to 1 --->
        <cfset Arguments.start = Arguments.start + 1>


        <cfif arguments.model EQ 'n_2664_1998'>

            <cfquery name="getNomoi" datasource="ktimatologio">
                SELECT CONCAT_WS('_',id,model) AS id, id AS 'id1', CONCAT_WS(' ',title,fek,date) AS 'title', description, body, model
                FROM n_2664_1998
                WHERE id = #arguments.id#
                ORDER BY id ASC
            </cfquery>

        <cfelseif arguments.model EQ 'n_2308_1995'>

            <cfquery name="getNomoi" datasource="ktimatologio">
                SELECT CONCAT_WS('_',id,model) AS id, id AS 'id1', CONCAT_WS(' ',title,fek,date) AS 'title', description, body, model
                FROM n_2308_1995
                WHERE id = #arguments.id#
                ORDER BY id ASC
            </cfquery>

        <cfelseif arguments.model EQ 'n_3889_2010'> 

            <cfquery name="getNomoi" datasource="ktimatologio">
                SELECT CONCAT_WS('_',id,model) AS id, id AS 'id1', CONCAT_WS(' ',title,fek,date) AS 'title', description, body, model
                FROM n_3889_2010
                WHERE id = #arguments.id#
                ORDER BY id ASC
            </cfquery>  

        </cfif>

        <cfset arrNomoi = convertQueryToExtJS(getNomoi,Arguments.start,Arguments.limit)>

        <cfset stcReturn = {"data"=arrNomoi,dataset=#getNomoi.RecordCount#}>

        <cfreturn stcReturn>

    </cffunction>

    <cffunction name="convertQueryToExtJS" access="public" hint="Convert Query to JSON usable by ExtJS Grid" returntype="array">
        <cfargument name="qryData" type="query" required="true" hint="Query to convert">
        <cfargument name="intStart" type="numeric" required="true" hint="Start of Result Set">
        <cfargument name="intLimit" type="numeric" required="true" hint="How many records to return">

        <!--- For the Array --->    
        <cfset var i = 1>        
        <cfset var end = ((Arguments.intStart) + arguments.intLimit)-1>
        <cfset var arrNomoi = ArrayNew(1)>

        <cfloop query="qryData" startrow="#Arguments.intStart#" endrow="#end#">        
            <cfset stcNomoi = StructNew()>
            <cfset stcNomoi['id'] = #qryData.id#>
            <cfset stcNomoi['id1'] = #qryData.id1#>
            <cfset stcNomoi['title'] = #qryData.title#>
            <!---<cfset stcNomoi['fek'] = #qryData.fek#>
            <cfset stcNomoi['date'] = #qryData.date#>--->
            <cfset stcNomoi['description'] = #qryData.description#>
            <cfset stcNomoi['body'] = #qryData.body#>
            <cfset stcNomoi['model'] = #qryData.model#>
            <cfset arrNomoi[i] = stcNomoi>
            <cfset i = i + 1>            
        </cfloop>


        <cfreturn arrNomoi>

    </cffunction>

</cfcomponent>

問題は、上記の関数を変数 (「コールバック」という名前) にラップしてクライアントにポストするにはどうすればよいかということです。

PHP で同様のコード ブロックを見たことがありますが、わかりません。以下は、PHP コード ブロックです。

<?php
$callback = $_REQUEST['callback'];
// Create the output object.
$output = array('id' => 1, 'url' => 'loianegroner.com');
//start output
if ($callback) {
header('Content-Type: text/javascript');
echo $callback . '([' . json_encode($output) . ']);';
} else {
header('Content-Type: application/x-json');
echo json_encode($output);
} 
?>

敬意を表して、

トム

ギリシャ

4

1 に答える 1

0

次の 2 つのファイルを見てください。

index.cfm は、AJAX 要求を送信するハンドラーであり、JSON の結果を返します。

http://websvn.openbd.org/websvn/filedetails.php?repname=OpenBD&path=%2Ftrunk%2Fwebapp%2Fmanual%2Fapi%2Findex.cfm

index.cfm は、この CFC と対話して情報をフェッチし、結果を返します。

http://websvn.openbd.org/websvn/filedetails.php?repname=OpenBD&path=%2Ftrunk%2Fwebapp%2Fmanual%2Fapi%2Findex.cfc

この API ラッパーを書いていたとき、returnFormat=JSON に問題がありました

于 2012-08-19T09:40:36.607 に答える