Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如果我只想*有时*打开一个新窗口,我可以避免进行同步回调吗?_Asp.net_Jquery_Popupwindow_Popup Blocker - Fatal编程技术网

Asp.net 如果我只想*有时*打开一个新窗口,我可以避免进行同步回调吗?

Asp.net 如果我只想*有时*打开一个新窗口,我可以避免进行同步回调吗?,asp.net,jquery,popupwindow,popup-blocker,Asp.net,Jquery,Popupwindow,Popup Blocker,在这种情况下: 用户在文本框中输入一些信息 用户单击一个按钮 服务器端对输入的信息进行处理 根据服务器端处理的结果,将打开一个新窗口,或在当前页面上显示一条消息(不弹出) 除了在jQueryajax调用中使用async:false之外,我想不出其他方法,即: 将此选项设置为false(从而不再进行呼叫 强烈不鼓励使用异步),因为它会导致浏览器 变得没有反应 我试过: 让调用异步并在回调处理程序中,这取决于服务器所说的,有时会打开一个新窗口-这会被弹出窗口阻止程序阻止 另一个想法,我甚至没有

在这种情况下:

  • 用户在文本框中输入一些信息
  • 用户单击一个按钮
  • 服务器端对输入的信息进行处理
  • 根据服务器端处理的结果,将打开一个新窗口,或在当前页面上显示一条消息(不弹出)
除了在jQuery
ajax
调用中使用
async:false
之外,我想不出其他方法,即:

将此选项设置为false(从而不再进行呼叫 强烈不鼓励使用异步),因为它会导致浏览器 变得没有反应

我试过:

  • 让调用异步并在回调处理程序中,这取决于服务器所说的,有时会打开一个新窗口-这会被弹出窗口阻止程序阻止
  • 另一个想法,我甚至没有因为它的不愉快而烦恼,就是总是打开一个窗口,正是这个新窗口调用服务器,有时会自动关闭(以某种方式在退出时更新父窗口中的文本)
我所确定的是我上面所描述的:在单击处理程序中,执行同步服务器调用,如果服务器要求这样做,则打开一个新窗口。弹出窗口拦截器对此很满意,因为窗口打开是在点击处理程序中完成的。但是


类似的(但不是重复的,因为我并不总是想打开一个新窗口)问题没有提供一个好的解决方案:

    • 你能做的是

      尝试在页面上设置一个隐藏字段,该字段将由服务器端的true或false等值设置,稍后您可以在jquery document.ready函数中进行检查

      如果该值为false,只需显示一个msg else弹出一个新窗口


      就这么简单

      我尝试了我的“不愉快”想法:总是打开一个新窗口,让新窗口进行服务器调用,如果服务器调用的结果表明不需要它,则关闭它自己

      但那太可怕了,所以我坚持使用同步呼叫


      所以对我来说,这个问题的答案是:不,在这种情况下,你不能避免同步

      你真的需要打开一个新窗口吗?难道你不能打开一个覆盖框或类似的东西吗?和Zeta一样的问题,而且,正如jQuery文档所说,强烈反对进行同步服务器通信……如果你不能立即得到服务器响应,你的用户将无法在你的页面上做任何其他事情。基本上,浏览器会一直挂起,直到服务器响应通过或出现错误。。。我知道这是不好的,我寻求一个更好的方法。Lightbox Me是一个轻量级模式,它对开发人员很友好(不像大多数Lightbox插件),感谢您的回答,但我不想发回整个页面,我想这就是您在服务器端设置隐藏字段值的意思?如果您正在进行Ajax调用,您肯定会得到一个html/数据,尝试从服务器获取额外值,该值将决定是否弹出。