asp 调用 java 脚本删除括号

asp call to java script removes brackets

我是 asp 和 vbscript 的新手,正在尝试将数据库条件列表传递给 javascript。该条件将在子句的 sql 语句中使用,如果它被调用的话。问题是括号被删除了!

in 子句的条件类似于

javascipt 获取行和列的参数并搜索数据库和 returns 取决于这些条件或条件集的 table 条目列表。

我一直在处理以下内容:

Response.Write "<td WIDTH='6%'  VALIGN='TOP' ALIGN='CENTER' bgcolor = " & ObjDic(elem).clrPreExisting & ">" & vbCRLF
Response.Write "<a href = ""javascript:alert("objDic(elem).critRow")""><font size='2' face='Arial' color='#000000'>" & ObjDic(elem).Get_PreExistingVal(RunningTotal.PreExisting) & "</font></a>" &vbCRLF
Response.Write "</td>" & vbCRLF

objDic(elem).critRow 的值来自直接 window 显示

objDic(elem).critRow "('Not Defined')" 但是 Java 警报显示未定义。

请注意这个思路。您可能正在做的是打开一个名为 SQL Injection attack 的巨大安全漏洞。通过允许 javascript 将未经处理的数据传递给您的查询,用户可以获得对您的数据库的完全访问权限。

更好的方法是创建一个 data access layer,它接受参数。然后它会在创建临时查询或将它们定向到 SQL 存储过程之前清理参数。

代码似乎有几个问题。首先,在大多数情况下,您可以通过使用带有 <%= %> 标记的内联字段值来避免使用 Response.Write。它们是 Response.Write 的 shorthand 形式,将变量、属性 或函数的内容写入它们出现的位置。在您的情况下,您可以替换为:

Response.Write "<td WIDTH='6%'  VALIGN='TOP' ALIGN='CENTER' bgcolor = " & ObjDic(elem).clrPreExisting & ">" & vbCRLF
Response.Write "<a href = ""javascript:alert("objDic(elem).critRow")""><font size='2' face='Arial' color='#000000'>" & ObjDic(elem).Get_PreExistingVal(RunningTotal.PreExisting) & "</font></a>" &vbCRLF
Response.Write "</td>" & vbCRLF

...与...

<td WIDTH='6%'  VALIGN='TOP' ALIGN='CENTER' bgcolor = '<%= ObjDic(elem).clrPreExisting %>'>
    <a href = "javascript:alert('<%= objDic(elem).critRow %>')"><font size='2' face='Arial' color='#000000'>
        <%= ObjDic(elem).Get_PreExistingVal(RunningTotal.PreExisting) %>
    </font></a>
</td>

拜托, 删除所有内联格式并用样式替换它 类...

<style>
    .cellClass {width: 6%; text-align: center; vertical-align: top;}
    .cellClass a {font-size: 2; font-family: arial; color: black;}
</style>
...
...
<td class="cellClass" bgcolor = "<%= ObjDic(elem).clrPreExisting %>">
    <a href = "javascript:alert('<%= objDic(elem).critRow %>')">
        <%= ObjDic(elem).Get_PreExistingVal(RunningTotal.PreExisting) %>
    </a>
</td>

我还建议坚持使用一种形式的引号。您使用几个不同的属性来标识您的属性,包括 "'"" 甚至 none。当我将值应用于属性时,我 总是 在经典 ASP.

中使用双语音标记

JavaScript略有不同,虽然我仍然使用双语音标记来指定对属性的赋值,但JavaScript代码中的语音标记通常是撇号('):

<a href="javascript:alert('Use single speech marks in strings.');">Click me</a>

在 VBScript 字符串中,您应该通过加倍来转义语音标记,所以...

Response.Write("Paul said: ""Use double speech marks in strings"".")

最后,如果您希望它按原样工作,您的代码有点错误。试试这个:

Response.Write "<td WIDTH='6%'  VALIGN='TOP' ALIGN='CENTER' bgcolor = " & ObjDic(elem).clrPreExisting & ">" & vbCRLF
Response.Write "<a href = ""javascript:alert(" & objDic(elem).critRow & ")""><font size='2' face='Arial' color='#000000'>" & ObjDic(elem).Get_PreExistingVal(RunningTotal.PreExisting) & "</font></a>" &vbCRLF
Response.Write "</td>" & vbCRLF

请注意中间一行的 JavaScript - 它缺少 属性 值前后的连接字符 (&)。