Response.ContentType =“text / javascript”无效

时间:2014-04-03 08:36:40

标签: asp-classic jscript

我是否可以了解Response.ContentType="text/javascript";无效的原因。

更详细地说,我有:

Response.Clear();
Response.ContentType = "text/javascript";
%>notifySuccess();<%

我得到的只是一个文字notifySuccess();的页面。查看页面源显示的文本相同。

查看响应标题,我得到:

Cache-Control: private
Content-Type: text/javascript
Content-Encoding: gzip
Vary: Accept-Encoding
Server: Microsoft-IIS/7.5
X-Powered-By: ASP.NET
Date: Thu, 03 Apr 2014 08:33:01 GMT
Content-Length: 149

200 OK

notifySuccess是调用页面中的一个函数,只是重新加载:

document.location.reload();

任何人都可以指出我正确的方向,为什么这不起作用。

我在Windows 7上使用IIS 7.5,但在Windows 2008上遇到了同样的问题。

经过多次评论没有成功,我创建了一个测试页面(具有相同的问题)。这是整个测试脚本:

<%@Language="JScript"%>
<%
Response.Clear();
Response.ContentType = "text/javascript";
%>alert(123);

也尝试过:

<%@Language="JScript"%>
<%
Response.Clear();
Response.ContentType = "text/javascript";
%><script type="text/javascript">alert(123);</script>

还有:

<%@Language="JScript"%>
<%
Response.Clear();
Response.ContentType = "application/javascript";
%>alert(123);

修改

因此,上面的测试脚本名为custom2.asp,我现在有一个名为custom.asp的脚本,它只包含一个带有action = custom2.asp的表单:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
    <form action="custom2.asp">
        <input type="submit" />
    </form>
</body>
</html>

这基本上是现有代码所做的,但它是在真实代码中的原型模型框中。

2 个答案:

答案 0 :(得分:2)

从评论中我知道你理解你缺少的东西

这有两个部分

  1. 您的ASP页面以JavaScript形式返回(对于参数解析js.asp

    <%
      Response.Clear();
      Response.ContentType = "text/javascript";
    %>notifySuccess();
    
  2. 包含JavaScript的ASP页面(我们称之为page1.asp)

    <html>
    <head>
      <title>Really basic page</title>
    </head>
    
    <body>
      <!-- your page content here -->
      <%
        'Might have some ASP code here
      %>
      <script type="text/javascript">
        function notifySuccess() {
          // This function is defined in this page and does something.
        }
      </script>
      <!-- this will be processed as JavaScript and call notifySuccess() -->
      <script type="text/javascript" src="js.asp"></script>
    </body>
    </html>
    

答案 1 :(得分:1)

如果您使用通常用于显示HTML文档的机制(例如,通过关注链接,提交表单或在地址栏中键入JS的URL)请求带有浏览器的JavaScript程序,则浏览器将显示该JavaScript程序的源代码为文本。这是正常行为。

要运行JavaScript程序,您需要:

  1. 创建HTML文档
  2. 在该文档中包含<script>元素
  3. src的{​​{1}}属性设置为JS程序的URL
  4. 使用浏览器访问HTML文档
  5. 但是,为了提交表单然后根据您获得的响应在当前页面的上下文中运行JavaScript ,您需要:

    1. 将事件处理程序(使用JS)绑定到表单的提交事件
    2. 防止表单提交的默认行为
    3. 使用Ajax发出HTTP请求(而不是正常提交​​表单)
    4. 检查响应(您应该将其设置为某种形式的结构化数据而不是应用程序代码)
    5. 如果响应表明条件适合它,则运行JS
    6. 但是,您的Javascript似乎只是重新加载现有页面,因此您可以完全忘记使用JS并使用不同的方法

      1. 正常提交表格
      2. 处理服务器端的数据
      3. 使用<script>标题发出HTTP 302 Found响应,并提供表单上显示的网页的网址
      4. 允许将浏览器重定向回其来源,在此过程中重新加载页面