JAVASCRIPT与服务器端交互

liushengmz 2009-04-03 10:40:40
各位好,现在小弟遇到一个问题,在Asp.net中运行一个函数,
运行到一半时需要跟客户端进行交互,
即是询问用户是否要继续执行,如果是就继续,否则就跳出。
小弟的想法是这样来的:
搞一个隐藏控件在源里,初始值为false,
用于客户端和服务器端传值。
在运行服务端的函数时,弹出一个JS的confirm框,
如果用户确定就把隐藏控件的值赋为true,否则为false。
然后根据隐藏控件的值去判断是否继续执行和退出。
思想就是这样子了,但问题来了。。。
调试跟踪的时候发现:在运行完弹出confirm框这一行时,
页面的confirm框还没有出来,
但是程序继续执行,并且根据隐藏控件的初始值进行判断,
结果程序就继续执行,直至这个函数运行完后,
才出现confirm框,等点击完确定后,隐藏控件的值才被改变,
而这个时候服务端的函数已经运行完了,
根本就做不到根据用户的判断来进行是否继续执行。
请问各位大虾,我应该怎么来才能实现根据用户的操作
来选择是否继续执行程序呢?
...全文
639 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiyibiao123 2011-12-15
  • 打赏
  • 举报
回复
楼主你好,我也遇到跟你同样的问题,你这个问题实现了吗?
liushengmz 2009-04-04
  • 打赏
  • 举报
回复
嗯,bingdian37你说的思路我基本理清了,也知道大概怎样去实现。

等会就去试一下。。。

谢谢赐教!

结贴快是因为有满意的答案嘛。。哈哈
jietuan 2009-04-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 kkun_3yue3 的回复:]
在按钮上加
if(confirm("确认继续"))
return true
else
return false
[/Quote]

或者你弹出一个页面,然后用session保持用户选择的结果!
kkun_3yue3 2009-04-03
  • 打赏
  • 举报
回复
在按钮上加
if(confirm("确认继续"))
return true
else
return false
bingdian37 2009-04-03
  • 打赏
  • 举报
回复
楼主这次结贴也太快了,

名字是我自己起得,所以不知道很正常,可能叫异步不合适,应该叫同步窗口才是,叫异步是因为使用了xmlhttprequest

实现方法大体描述下

不方便给你直接出源代码,请理解

第一.服务端要调用某个东西去弹出窗口,我们把这个类独立出来,称为异步窗口类
这个类要完成的任务就是:

向客户端发送一段脚本,并且强制服务端立即输出,然后开始断断续续的sleep,并检测时候有结果返回(如何检测下面会说)
该脚本将完成弹出窗口,将参数传递到弹出窗口,并等待弹出窗口关闭,接收返回结果
并将结果传递给服务端的任务

关键点在与如何将结果传递给服务端,这里就需要使用xmlhttprequest对象了,将结果提交到服务器
这个时候服务器正在断断续续的sleep,如何让服务器直到这个结果呢?

这里就要通过HttpModule了,在服务端由一个HttpModule去接收结果,并保存到application级别的一个哈希表中,服务端检测是否有结果返回的时候就是通过这个地方去查询

当然,为了能够确定一个准确的结果(不至于在多个用户弹出多个窗口时候混淆),你自己要去唯一的标识一个弹出窗口,并在提交结果的时候同时提交该标识

当然,服务端应该有超市机制,过了多长时间,没有应答的话,就有个默认的动作去继续

另外客户端浏览器那个弹出窗口,应该用模态窗口比较合适,但是不能让他一直在那里,可以再加上一个倒计时

基本思路就是如此

希望对你有所帮助

liushengmz 2009-04-03
  • 打赏
  • 举报
回复
同时谢谢所有回答过的朋友。。。。
liushengmz 2009-04-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 bingdian37 的回复:]
同时需要跟楼主确认的是

你说的那个函数的运行,100%是由客户在浏览器上的动作触发的

按钮点击也好,页面浏览也好,反正是客户端动作触发服务端方法的执行

这样才有可能在浏览器端弹出一个窗口

否则,你无法跟页面交互
[/Quote]


确实是这样,100%由客户端触发。。。

只不过事件运行到一半还是要客户端去确认一下而已。。。。

谢谢
liushengmz 2009-04-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bingdian37 的回复:]
这个东西我把他叫做异步窗口

就是从服务端给浏览器端强行弹出个窗口

同时等待浏览器端的窗口返回一个结果之后,服务器端程序继续执行

也就是说,在弹出窗口的时候,服务器端的代码是中断运行的,待浏览器的新窗口关闭后,服务器端代码才继续执行

你说的对话框,其实用一个弹出窗口更合适更通用

然后窗口中可以包含指定的页面,来完成特定的工作,而不仅仅只要个yes or no

也可以传参,返回参数,窗口关闭…
[/Quote]


呵。。。谢谢bingdian37的回答,确实是要这样的效果,

只不过小弟不知那种情况就叫做“异步窗口”,

现在是明白了,可是怎样来实现呢?

还有,我的结贴率这么小是因为只问过四个问题,

而且都是关于WebPart的。。。。

所以结贴比较少。。。哈哈。。。。。

只要有满意的答案我还是给分的。。。嘻。。。不要介意啊。。。。

还有,你在八楼哎了一下。。什么意思呢?


等会再结贴啊。。。。
bingdian37 2009-04-03
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 kkun_3yue3 的回复:]
明白你的意思,把"程序运行到一半",这部分放到页面加载时搞定,能明白啵?
页面加载完毕就把"一半"的程序执行完,把结果输出到页面某控件里,如hidden控件里,
在扭钮事件里直接取hidden控件里的值弹出confirm,询问是否继续,如果不继续return false,否则继续执行,
在得到confirm的返回值后,如真或假,用JS把返回值放到HIDDEN控件里,后台CS文件读取该值以判断用户当时的选择,
如confirm用户选择了是,则document.getElementById("某hi…
[/Quote]

kkun_3yue3 2009-04-03
  • 打赏
  • 举报
回复
明白你的意思,把"程序运行到一半",这部分放到页面加载时搞定,能明白啵?
页面加载完毕就把"一半"的程序执行完,把结果输出到页面某控件里,如hidden控件里,
在扭钮事件里直接取hidden控件里的值弹出confirm,询问是否继续,如果不继续return false,否则继续执行,
在得到confirm的返回值后,如真或假,用JS把返回值放到HIDDEN控件里,后台CS文件读取该值以判断用户当时的选择,
如confirm用户选择了是,则document.getElementById("某hidden").value = 1否则写0,
后台CS文件里取
某hidden.value == "1" ?do something : do another thing;
bingdian37 2009-04-03
  • 打赏
  • 举报
回复
楼主25%的结贴率比较显眼
bingdian37 2009-04-03
  • 打赏
  • 举报
回复
同时需要跟楼主确认的是

你说的那个函数的运行,100%是由客户在浏览器上的动作触发的

按钮点击也好,页面浏览也好,反正是客户端动作触发服务端方法的执行

这样才有可能在浏览器端弹出一个窗口

否则,你无法跟页面交互
bingdian37 2009-04-03
  • 打赏
  • 举报
回复
这个东西我把他叫做异步窗口

就是从服务端给浏览器端强行弹出个窗口

同时等待浏览器端的窗口返回一个结果之后,服务器端程序继续执行

也就是说,在弹出窗口的时候,服务器端的代码是中断运行的,待浏览器的新窗口关闭后,服务器端代码才继续执行

你说的对话框,其实用一个弹出窗口更合适更通用

然后窗口中可以包含指定的页面,来完成特定的工作,而不仅仅只要个yes or no

也可以传参,返回参数,窗口关闭倒计时,等。。

不知道你想要的是不是这样的效果
liushengmz 2009-04-03
  • 打赏
  • 举报
回复
楼上说的都是得等到那个函数执行完之后

才会弹出对话框啊,而不是程序运行到一半

就弹出对话框啊,而且这个事件不是由按钮来触发的,

也就是说不是等用户来确定运行整个函数,

而是运行到一半的时候要用户来确定是否要继续的问题。。

继续等待。。。。感谢楼上两位的帮助

62,268

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧