当前位置:编程学习 > C#/ASP.NET >>

异步方法中调用js失败,求各位大侠支招

各位好,最近LZ遇到了一个业务场景。类似于银行做业务的评价功能。
银行职员做完一个业务后需按一下评价器,然后需等待客户按评价器评价。但是这个时候银行职员应该可以继续做下一个业务,而客户点击评价器或者不点评价器(20s超时)都应该记录出来。
这里面存在一个问题,客户按不按这个评价功能都不能影响银行职员继续往下办理业务。但是同时应该还需要接收客户反馈回来的评价信息。

初步LZ考虑的是用异步调用的方法来操作,这样保证不会影响到银行办理下一个业务。但是问题出现了,异步方法里面调用获取评价结果的js触发不了。苦寻无果,遂前来求助大家。希望大家能给点意见,面对这样的业务场景该怎么来做,同时如果有大牛能解惑下这里为啥js触发不了。谢谢了 异步 异步调用js .NET JS 回调 --------------------编程问答-------------------- 问题出在哪里 代码呢?你这样问 怎么回答哦? --------------------编程问答--------------------
引用 1 楼 zxy397472251 的回复:
问题出在哪里 代码呢?你这样问 怎么回答哦?

问题就是异步方法里面调用js的时候触发不了,但是这个js放到其他地方(例如按钮事件中)可以正常触发。 --------------------编程问答-------------------- 用chrome或者firefox下的firebug插件调试下js看下出现什么问题 --------------------编程问答--------------------
引用 3 楼 nice_fish 的回复:
用chrome或者firefox下的firebug插件调试下js看下出现什么问题

JS应该没什么问题,我用IE调试的,是直接不能触发。因为获取评价结果的这个JS要放到异步里面不停的调用,但是就是触发不了这个JS --------------------编程问答-------------------- 你的异步方法可以执行其它的方法成功吗?比如alert("test")这种? --------------------编程问答--------------------
引用 5 楼 nice_fish 的回复:
你的异步方法可以执行其它的方法成功吗?比如alert("test")这种?

不行。。。
就是不知道是为什么 --------------------编程问答--------------------
引用 6 楼 jiang_sky1217 的回复:
Quote: 引用 5 楼 nice_fish 的回复:

你的异步方法可以执行其它的方法成功吗?比如alert("test")这种?

不行。。。
就是不知道是为什么


那现在的问题就是这个异步方法了,调试这个异步方法。 --------------------编程问答-------------------- 大致源码如下:


//声明委托
public delegate string GetEvaDelegate(object sender, EventArgs e);

//请您评价
protected void btnThank_Click(object sender, EventArgs e)
{
  GetEvaDelegate getEva = new GetEvaDelegate(GetEvaStr);
  getEva.BeginInvoke(sender, e, new AsyncCallback(CallBack), null);
}

private string GetEvaStr(object sender, EventArgs e)
{
   XXX;
   ScriptManager.RegisterStartupScript(this, this.GetType(), "Ext", "reExeForEva()", true);
  return xxx;
}
private void CallBack(IAsyncResult tag)
{
   xxx;
}


reExeForEva();方法在前台注册的任一方法(如alter('a'))。但是这个方法触发不了 --------------------编程问答--------------------
引用 8 楼 jiang_sky1217 的回复:
大致源码如下:


//声明委托
public delegate string GetEvaDelegate(object sender, EventArgs e);

//请您评价
protected void btnThank_Click(object sender, EventArgs e)
{
  GetEvaDelegate getEva = new GetEvaDelegate(GetEvaStr);
  getEva.BeginInvoke(sender, e, new AsyncCallback(CallBack), null);
}

private string GetEvaStr(object sender, EventArgs e)
{
   XXX;
   ScriptManager.RegisterStartupScript(this, this.GetType(), "Ext", "reExeForEva()", true);
  return xxx;
}
private void CallBack(IAsyncResult tag)
{
   xxx;
}


reExeForEva();方法在前台注册的任一方法(如alter('a'))。但是这个方法触发不了


汗,楼主知道什么叫做页面生命周期吗 --------------------编程问答--------------------
引用 9 楼 a407121393 的回复:

汗,楼主知道什么叫做页面生命周期吗

/流汗 请大侠赐教。。。小弟跪谢 --------------------编程问答-------------------- 我用你的代码测试发现,注册的js是可以执行的。

<script type="text/javascript">
function reExeForEva() {
alert("test");
}
</script>
<asp:Button runat="server" Text="Button" OnClick="btnThank_Click" />


//声明委托
public delegate string GetEvaDelegate(object sender, EventArgs e);

public partial class About : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) {

}

//请您评价
protected void btnThank_Click(object sender, EventArgs e) {
GetEvaDelegate getEva = new GetEvaDelegate(GetEvaStr);
getEva.BeginInvoke(sender, e, new AsyncCallback(CallBack), null);
}

private string GetEvaStr(object sender, EventArgs e) {

ScriptManager.RegisterStartupScript(this, this.GetType(), "Ext5-1", "reExeForEva()", true);
return "test";
}

private void CallBack(IAsyncResult tag) {

}
}
--------------------编程问答--------------------
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,