2012-10-30 94 views
3

我有一个Javascript组件,当DOM被加载时,它需要发送一个请求到我们的CDN,其中可能位于不同的域中,以查看是否有内容这个组件。如果存在,组件将自行实例化(它是链接以打开模式中的嵌入式视频),否则它会自毁。我的问题主要是关于我用来代理AJAX请求的Grails控制器。使用Grails控制器来代理AJAX请求

这里是在伪代码的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发送给控制器,控制器尝试连接到该URL(在我们的CDN),然后将该响应传递回XHR对象的responseText部分中的AJAX成功回调。这对我来说感觉不太理想,是否有可能将实际响应传递回JS功能?

+1

此信息对您也可能有用:http://stackoverflow.com/a/2824968/311525 – Scott

回答

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 
      } 
    }