使用jQuery ajax调用从不同的域访问速度模板

时间:2012-07-09 07:42:02

标签: jquery cors

我有一个应用程序,它使用部署在同一服务器上的Apache Velocity(因为我在本地开发它,但可能在Prod中的另一台服务器上)。从我当前的应用程序,我需要从该应用程序获取Velocity模板并在Jquery对话框中显示该模板。 我能够进行跨域ajax调用

$.ajax({
         url         : '/ContextRootOfdifferentApplication/preview.do',
         data        : 'previewJson=' + JSON.stringify(dataForPreview),
         contentType : "text/plain; charset=utf-8",
         crossDomain : true,
         type        : "POST",
         dataType    : 'html',
         success     : function(response){
             window.open(response);
           }
         });

在调试器中,我可以将响应视为有效的HTML

<html>
<head>
<body>
    <div id="container" align="center">
    <div>&nbsp;</div>
    <div>&nbsp;</div>
    <div style="width: 80%; height: 10px; background-color: #6698FF;"></div>
    <div>&nbsp;</div>
    <div>&nbsp;</div>
    <div id="errormsg" style="text-align: center; font-weight: bold;">Preview Not Available!!!</div>
    <div>&nbsp;</div>
    <div>&nbsp;</div>
    <div style="width: 80%; height: 10px; background-color: #6698FF;"></div>
    </div>
</body>
</html>

但是,只要我尝试将此HTML页面显示为弹出窗口或jQuery对话框,就会出现404错误

  

HTTP状态404 -   / currentApp /%3Chtml%3E%3Chead%3E%3Cbody%3E%3Cdiv%20id =%22container%22%20align =%22center%22%3E%3Cdiv%3E%3C /格%3E%3Cdiv%3E%3C /格%3E%3Cdiv%20style =%22width:%2080%;%20height:%2010px;%20background色:%20

     

消息   / currentApp /%3Chtml%3E%3Chead%3E%3Cbody%3E%3Cdiv%20id =%22container%22%20align =%22center%22%3E%3Cdiv%3E%3C /格%3E%3Cdiv%3E%3C /格%3E%3Cdiv%20style =%22width:%2080%;%20height:%2010px;%20background色:%20

     

description请求的资源   (/ currentApp /%3Chtml%3E%3Chead%3E%3Cbody%3E%3Cdiv%20id =%22container%22%20align =%22center%22%3E%3Cdiv%3E%3C /格%3E%3Cdiv%3E%3C /格%3E%3Cdiv%20style =%22width:%2080%;%20height:%2010px;%20background色:%20)   不可用。

知道我在这里错过了什么可能导致这个错误?

ps: ContextRootOfdifferentApplication 我正在进行ajax调用的应用程序。 currentApp :我正在进行Ajax调用的应用程序

1 个答案:

答案 0 :(得分:1)

好的,最后我找到了我正在做的解决方案/错误。 当我试图打开这个作为弹出窗口我正在写

window.open(response)

由于响应是从ajax调用中获取的html代码,因此无法从中获取URL并抛出404错误。

在用它打开jquery对话框时我犯了同样的错误。

最后这条线对我有用:

$('#response').html(response).dialog({modal:true});