我有来自第三方供应商的资源,仅通过http
协议提供服务。当我包含这样的脚本标签时......
<script src="http://example.com"></script>
我得到一个带有JSON数据的javascript变量,与此类似......
var data = {"total": "10", "results": [{"name": "Joe", "title": "developer"}, {"name": "Jane", "title": "engineer"}]};
然后,我可以在页面中使用变量data
来输出结果等。
问题是,我需要通过SSL(https
)在页面上提供此数据,而我无法通过http
为https
页面发出资源请求 - 这意味着{ {1}}包含不起作用。
作为一个解决方案,我从服务器页面请求资源,比如说<script/>
,然后从我的服务器通过data.cfm
重新提供JS变量。所以,在这种情况下,我希望https
向https://anotherserver.com/data.cfm
http://example.com
我还应该注意,JSON数据中包含HTML标记。
当我尝试转到<cfhttp result="myData" method="GET" charset="utf-8" url="http://example.com">
<cfoutput><pre>#myData.fileContent#</pre></cfoutput>
时,我获取了数据,但格式不正确。例如,超链接作为超链接处于活动状态。
我也尝试使用https://anotherserver.com/data.cfm
将数据作为无格式字符串返回,但是当我使用<cfdump>
标记时,我没有得到JS变量。
更新
通过进一步测试,我发现如果我只是将数据作为文本复制到2个文件中:data.cfm和data.js,js文件按预期工作,cfm文件不工作。这让我相信文件扩展名导致资源被读取为html。所以,这更像是一个Coldfusion问题。如何通过浏览器将cfm文件设置为javascript?是否有一些响应头或元数据字段可以实现此目的?
答案 0 :(得分:1)
我可能会为此投反对票。正确的做法是告诉该服务在其服务器上启用https。不接受使用https的面向公众的基于Web的服务是不可接受的。
答案 1 :(得分:0)
首先,如果您在浏览器中查看js和cfm文件,那么js将基本上显示为文本输出,cfm将被解释为html。这是由于Web服务器自动返回的mime类型或浏览器进行的猜测。这就是cfm方法看起来不同的原因。但是,如果您使用脚本标记提取网址,则会假定它是javascript。如果您在cfm页面上执行源代码视图,它应该看起来很好。
其次,我们需要更多信息来准确诊断导致您遇到的问题的原因,其中包含js文件与托管相同信息的cfm文件导致后者出错。我最初的猜测是,这里发生的事情比我们在你的问题中看到的要多,并且存在一个javascript转义问题。 (编辑:实际上我看到一些js代码可能会根据内容类型做出决定,所以返回可能会有所不同,具体取决于使用方式)
最后,如果将cfm文件的确切输出保存到js文件,则应设置。通过脚本标签从cfm文件中提取javascript应该没有问题。但是,为了避免任何潜在的问题,并添加一些缓存,您可以保存到静态文件。缓存将允许文件在一段时间内只被拉一次(例如:每分钟一次)。在您的普通代码中,您可以添加此...
<cfif not structKeyExists(application, "jsfilename_cachesaved") or application.jsfilename_cachesaved lt dateAdd("n", -1, now())>
<cflock name="jsfileupdate" timeout="5">
<cfif not structKeyExists(application, "jsfilename_cachesaved") or application.jsfilename_cachesaved lt dateAdd("n", -1, now())>
<cfhttp result="myData" method="GET" charset="utf-8" url="http://example.com">
<cffile action="write" file="#jsfilepath#" output="myData.fileContent" />
<cfset application.jsfilename_cachesaved = now() />
</cfif>
</cflock>
</cfif>
(双if语句用于避免不必要的锁定以及同时锁定用户的不必要的保存)