3

DOM がロードされたときに、このコンポーネントのコンテンツがあるかどうかを確認するために、別のドメインにある可能性がある CDN にリクエストを送信する必要がある Javascript コンポーネントがあります。存在する場合、コンポーネントは自己インスタンス化され (モーダルで埋め込まれたビデオを開くためのリンク)、存在しない場合は自己破壊します。私の質問は主に、AJAX リクエストをプロキシするために使用している Grails コントローラーに関するものです。

疑似コードの JS は次のとおりです。

checkForVideoAssets: function(videoDataUrl){
    Ajax.get(videoDataUrl, function(data){
    if(data.responseText==='error'){
    //tear down the component
    }
    else{
    //if there is data for the video instantiate the component
    }

Grails コントローラーは次のとおりです。

def checkForModalVideoAsset = {
    def req = new URL("http://" + params.videoUrl + "/expense/videos/")
    def connection = req.openConnection()

    if(connection.responseCode != 200){
        render 'error'
    }

    if(connection.responseCode == 200){
        render req.getText()
    }
}

要約すると、JS は DOM から URL の一部 (慣例で定義) を持つ属性を取得し、その URL をコントローラーに送信し、コントローラーは (CDN で) その URL への接続を試みてから、その応答を、XHR オブジェクトの responseText 部分内の AJAX 成功コールバックに渡します。これは私にとって理想的とは言えません。実際の応答を JS 関数に戻すことは可能ですか?

4

1 に答える 1

1

httpbuilderが役に立つかもしれません

試したことないけど似てる!?

def checkForModalVideoAsset = {

    def http = new HTTPBuilder("http://" + params.videoUrl )

    http.get( 
          path : "/expense/videos/",
          contentType : TEXT ) { resp, reader -> 
             response.properties=resp.properties //<-- to easy to work but why not try :)
             response << resp
             }
    }
于 2012-10-31T01:06:00.747 に答える