【问题标题】:When I use window.location.href ,then my another function not calling .Following is my javascript code当我使用 window.location.href 时,我的另一个函数没有调用 .Following 是我的 javascript 代码
【发布时间】:2014-02-13 11:50:27
【问题描述】:

我正在使用以下代码..

  1. 当我点击链接时,javascript Hello() 函数被调用
  2. 我想用window.location.href
  3. 但是当我使用下面这个__doPostBack('Button2_Click')时,它不起作用。
  4. 但是,当从以下代码中删除 window.location.href 时,__doPostBack('Button2_Click') 确实有效。

     <script type="text/javascript">
    
        function Hello(clicked_id) {
            var abc = "http://localhost:2621/OrgChart.aspx?id" + clicked_id;
            window.location.href = abc;
            __doPostBack('Button2_Click');
    
            return false;
        }
    
    </script>
    
    <a id="A1" href="javascript:Hello();">LINK</a>
    

这是我的代码背后的代码...

  public partial class WebForm17 : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        ClientScript.GetPostBackEventReference(this, string.Empty);//This is important to make the "__doPostBack()" method, works properly 

        if (Request.Form["__EVENTTARGET"] == "Button2_Click")
        {
            //call the method 
            Button2_Click(this, new EventArgs());
        } 

    }

    protected void Button2_Click(object sender, EventArgs e)
    {

        Label1.Text = "Method called!!!";
        EmpInfo emp = new EmpInfo();
        DA_EmpInfo da_emp = new DA_EmpInfo();
        List<EmpInfo> lei = da_emp.GetAllEmployeeInfoByEmpId("MJ-IB-1");
        DetailsView1.DataSource = lei;
        DetailsView1.DataBind();
    }
}

【问题讨论】:

  • window.location.href 更改页面,因此当前在页面上运行的任何异步函数都将中止。

标签: javascript jquery asp.net .net


【解决方案1】:

我猜,__doPostBack 正在向服务器发出请求,而你使用 window.location.href = abc; 中断了它。

您应该使用此请求中的一些回调来重定向到您的网址。

【讨论】:

  • 我如何使用回调..重定向我的网址
  • @UditSharma 我不知道 asp.net 但检查 DOC,__doPostBack() 方法应该接受回调(完成或成功)
【解决方案2】:

尝试使用setTimeOut函数

        setTimeout(function () {
            window.location.href = abc;
        }, 1000);

这将等待 1 秒以完成 __doPostBack() 函数。

或者,如果您不想使用 timeOut,请将 window.location.href = abc; 行粘贴到 __doPostBack() 函数的末尾。

【讨论】:

  • 不,永远不要使用任何类型的超时来等待任何异步方法完成,而是使用回调方法
  • 解决异步问题的最简单方法
  • 或者会带来一些很难捕捉的错误。如果请求的完成时间超过 1 秒会怎样?
  • 你说得对,但这对于随意的小请求并不重要。如果这个小请求的完成时间超过 1 秒,则说明某个地方存在另一个问题,请尝试解决该问题。
猜你喜欢
  • 1970-01-01
  • 2017-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 2017-05-20
  • 2020-10-25
  • 1970-01-01
相关资源
最近更新 更多