<script language="javascript">
<!--
function updateContactOpts(userid){
Smalls=new Array();
<%
i=0
Cae="select * from Tcontacts where Userid="&Userid&" order by Cid"
Set Rce=Conn.Execute(Cae)
If Rce.eof and Rce.bof then
   Response.Write "目前此公司没有联系人"
else
  Do while not Rce.eof
    Response.Write Vbcrlf&"Smalls["&i&"] =new Array('"&Rce("Cid")&"','"&Rce("Cname")&"');"
    i=i+1
    Rce.movenext
  Loop
  Rce.close
  set Rce=nothing
end if
%>
var i;
document.form1.Cid.length=0 ;
document.form1.Cid.options[document.form1.Cid.length]=new Option("请选择联系人","");
for (i=0 ;i <Smalls.length;i++){
  document.form1.Cid.options[document.form1.Cid.length]=new Option(Smalls[i][1],Smalls[i][1]);
   }
}
-->
</script>
利用按钮触发这个updateContactOpts,然后得到一个下拉框,  上面的代码我文件打开就直接运行了(还没点击按钮),提示“语法错误 (操作符丢失) 在查询表达式 'Userid='”请问上面的代码如何修改,我的本意是想根据选择的公司的不同,得到这个公司对应的联系人下拉框。

解决方案 »

  1.   

      现在是打开页面,这个JS直接运行了,这样userid肯定是没有数据的,肯定报错。  为啥会直接运行呢?
      

  2.   

    说下你这个代码在实际应用中的问题1 不建议ASP代码获得的数据直接插在JS代码片段中 并不是良好的编程习惯 应该前端和后端分开才好 而且可以用ASP回填HTML或者ASP生成JSON提供给JS使用 都是不错的解决方案2 在ASP代码中 Response.Write "目前此公司没有联系人" 存在JS代码中 如果此时没有数据记录 你的JS代码到这里就错了 因为JS中没有一个可执行的语句可写成 目前此公司没有联系人3 结合你说的错误提示 语法错误 (操作符丢失) 在查询表达式 'Userid=' 或者你这里的数据表中Userid是个字符类型的数据 可以试试写成Userid=' ..... ' 这种形式 如果上面3个问题你都能做更改 下面的解释或者已经无所谓了 关于为什么没有达到楼主所想的选择公司不同 显示对应公司联系人的本意了 请楼主关注一下 什么叫客户端程序 什么叫服务端程序 ASP是个服务端程序 在这些代码在服务器上解释后才会以HTML页面的形式返回给客户端电脑(就是浏览这个网页的电脑) 然后此时JS程序才会接着在客户端电脑上执行 所以你上面的代码 第一没有JS出发的事件 第二 即使有出发的事件来执行函数 但函数中包含的ASP代码在页面被你在浏览器上看到之前就已经执行完毕了 所以你的目的按你现在的代码是达不到的 解决方案有二 但前提还是你要去熟悉客户端和服务端的概念 和各自的特点方案一 把数据通过ASP一次性加载出来 比如你公司有 A B C 公司A 有联系人A1 A2 B有联系人B1 C有联系人C1 吧这些数据全部从数据库中读取出来 然后写入到HTML中 在加上部分JS操作即可 方案二 使用AJAX动态调用 数据量少 用方案一和二都可行 数据量多 方案二的效率将优于方案一