AJAX从Classic ASP返回包含的文件

时间:2015-05-13 16:17:12

标签: jquery ajax json asp-classic

我有一个使用AJAX和Classic ASP的应用程序,在我的ajax请求中我试图从页面返回一个JSON值。

$("#btnSaveAdvisor").click(function() {
    $.ajax({
        method: "GET",
        url: "verify_survey.asp",
        contentType: "application/text",
        dataType: "text",
        data: { 
        }, success: function(data) {
            console.log(data);
        }, error : function(xhr) {
            console.log(xhr);
        }
    });

(我删除了数据参数,因为有负载)

我将其作为文本的dataType获取,但是当设置为JSON时,它返回相同的内容。问题是返回数据是:

<!-- include file="functions/tabs/tabs.asp" -->


<!-- include file="functions/password/config_password.asp" -->


[{"surveyId" : "64"}]

但是,当我将参数传递给URL时,它只显示最后一行。

当我添加此

Response.AddHeader('Content-Type', 'application/json')

它返回我上面看到的所有行,我可以这样做,所以当我甚至没有把它们写到页面上时,这两行不会出现吗?

1 个答案:

答案 0 :(得分:0)

这两个语句在某些时候都是有效的IIS服务器端包含指令(SSI),但可能是为了阻止它们被处理,#被删除了。

这个问题是它们不再被预处理和处理,就像客户端调用其他页面的其他输出一样(@technophobia {{3}在评论中)

所以为了阻止这些出现,你有几个选择;

  1. 添加#并允许对SSI进行预处理。
  2. 完全删除<!-- include -->行,因为它们不包含未经预处理的#include行。 (推荐)
  3. 有条件地加载SSI,例如;

    <% 
    Dim process_includes
    
    'Pass querystring value to determine if includes are processed.
    process_includes = (Request.QueryString("i") = "1")
    If process_includes Then
    %><!-- #include file="functions/tabs/tabs.asp" -->
    <!-- #include file="functions/password/config_password.asp" --><%
    End If
    %>
    

    然后你可以修改AJAX

    处理包含;

    url: "verify_survey.asp?i=1"
    

    或忽略它们;

    url: "verify_survey.asp?i=0"
    
      

    请记住,此方法将根据包含的组织方式给出不同的结果。如果包含函数列表,则此方法不适合FunctionSub语句不能存在于If语句中。

         

    但是你必须问自己,如果它只是Function和/或Sub程序的列表,那么在第一个程序中对它进行预处理有什么害处放置?