【问题标题】:Without alert, my web service wont get called没有警报,我的网络服务不会被调用
【发布时间】:2026-01-28 13:00:01
【问题描述】:

这是我试图在 dotnetnuke HTML 模块中调用我的 RESTful Web 服务的代码。 如果我删除 javascript 中的警报并按下提交按钮,页面不会重定向。当我再次发出警报时,它起作用了!我认为这与延迟有关。我想在不使用警报功能的情况下完成这项工作。请帮忙。

 <html>
 <head>
<script type="text/javascript"> 
function s()
 {

 var a=document.getElementById('txt').value; 
var url= 'http://localhost:9737/RestServiceImpl.svc/xml/'+a; 
window.location = url;
   window.alert("hi");
  
} 
</script>
 </head>
 <body> <input type="text" name="txt" id="txt" />
 <input type="submit" value="submit" onclick="s();"/> 
</body>
 </html>

【问题讨论】:

  • 你有一个有缺陷的文档结构 - script 标签也在 html tag 中(最好让它成为 head 的子元素)。
  • @collapsar 非常感谢!我这样做了。但是还是不行!
  • 这一定是您的设置问题 - @Sandeeproop 的解决方案工作得非常好(在代码中重定向到谷歌)。你用什么浏览器?
  • @collapsar 我正在使用 Firefox。如果是设置或浏览器问题,那么即使有警报,它也不应该正常工作!但它与警报一起工作!这看起来很奇怪
  • 在 Firefox 中按 ctrl-shift-j,从弹出窗口中选择 net 选项卡,查看提交表单时记录的网络请求。

标签: javascript html web-services dotnetnuke-module dotnetnuke-7


【解决方案1】:

尝试在结束 &lt;/body&gt; 标记之前移动您的 &lt;script type="text/javascript"&gt;

<html>
  <head><title></title> </head>
  <body> <input type="text" name="txt" id="txt" />
    <input type="submit" value="submit" onclick="s();"/> 
    <script type="text/javascript"> 
     function s()
     {

       var a=document.getElementById('txt').value; 
       var url= 'http://localhost:9737/RestServiceImpl.svc/xml/'+a; 
       window.location = url;

     } 
    </script>
  </body>
 </html>

希望这能解决您的问题。

【讨论】:

  • 我刚试过你说的。还是不行!
  • 解释不正确。变量定义封装在一个函数中,赋值只会在调用s时才会被评估,这只会发生在点击提交按钮之后(原因很明显,当时相关的dom节点是可以访问的)
  • 任何具体错误??不工作意味着你没有得到数据或 URL 没有改变?我在本地尝试过它对我有用(更改 URL)。
  • @collapsar 你是对的。我已经更新了我的答案,感谢您指出这一点。
  • @collapsar 你能帮我改正代码吗?我把&lt;script&gt; 放在&lt;head&gt; 标签内!
【解决方案2】:

需要防止默认,否则浏览器会立即导航离开

function s(event) {
 var a=document.getElementById('txt').value; 
  var url= 'http://localhost:9737/RestServiceImpl.svc/xml/'+a; 
  window.location = url;
  event.preventDefault();
} 

或者你可以从函数s()return false;

【讨论】:

  • 也试过了!我不明白怎么了!什么都试过了!
  • 没有这样的错误信息!页面刷新仅此而已,而它应该重定向到指定的 url。
  • @SwatiVerma add return false; 就像我建议的那样
  • 是的,我做到了!加了return false; 还是不行
  • 你能确认 s() 函数被调用了吗?