C# load似乎在意外点运行

C# load似乎在意外点运行,c#,asp.net,javascript,jquery,ajax,C#,Asp.net,Javascript,Jquery,Ajax,因此,我试图从一个.aspx页面加载一些返回的html,但在执行AJAX请求所依赖的某些操作之前,需要触发一个click事件。更具体地说,我正在这样做。当用户在文本字段中键入时,此函数将运行 function KeyPress() { $("#" + HiddenButtonId).click(); $("#test").load("TempJumpToAJAX.aspx"); } 然后$(“#”+hiddenbutonid)。单击();在代码隐藏文件中设置一些会话数据。具体地说 Se

因此,我试图从一个.aspx页面加载一些返回的html,但在执行AJAX请求所依赖的某些操作之前,需要触发一个click事件。更具体地说,我正在这样做。当用户在文本字段中键入时,此函数将运行

function KeyPress() {
  $("#" + HiddenButtonId).click();
  $("#test").load("TempJumpToAJAX.aspx");
}
然后$(“#”+hiddenbutonid)。单击();在代码隐藏文件中设置一些会话数据。具体地说

Session["SearchText"] = Search.Text;
然后,$(“#test”).load(“tempumptoajax.aspx”);调用返回新构建的选择框的.aspx页面

        Response.Expires = -1;

        StringBuilder builder = new StringBuilder();


        builder.Append("<select id=\"testListId\" name=\"testList\" size=\"4\" style=\"width:200px;\">");
        builder.Append("<option>");
        builder.Append(Session["SearchText"]);
        builder.Append("</option>");            
        builder.Append("</select>");

        Response.ContentType = "text/HTML";
        Response.Write(builder.ToString());
        Response.End();

命令颠倒的地方。实际上,会话变量有一个空字符串,而不是用户在文本框中键入的字符串。对我来说奇怪的是,它似乎不应该有一个空字符串,它似乎应该没有任何内容,因为会话变量在这一点上还没有初始化为任何内容。我真的不知道发生了什么事。我想这是因为缺乏经验。有什么想法吗?

你在这里混合技术。hiddenButtonID click事件试图对页面进行完整回发,而AJAX调用不会进行回发。没有理由回帖,然后用AJAX调用跟进。AJAX的要点是不需要回发页面,而只需使用一个小的服务器回调在页面上重新加载少量HTML。您应该在AJAX调用参数中将该数据传递给服务器,而不是访问Hiddenbutonid click事件处理程序中的搜索文本框文本

下面的客户端脚本应该执行此操作


function KeyPress() {
  $("#test").load("TempJumpToAJAX.aspx", {searchText: $("#").val()});
}

在这段代码中,您将获得搜索文本框的ID,然后使用jQuery检索该文本框的值。这将作为名为“searchText”的POST变量传递到TempJumpToAJAX.aspx页面。您应该能够通过访问“TempJumpToAJAX.aspx”页面中的Request['searchText']变量来访问此数据。

另一个智能扩展是,在按下某个键后不立即执行ajax调用。如果用户快速键入一个长单词,那么触发多个ajax http请求的速度将超过它们返回和更新UI的速度

这会增加服务器负载,并可能使客户端的UI变得迟钝

相反,在按键时,存储所有适当的详细信息,然后调用

var timeout=setTimeout('some_method()',100)

这表示在100毫秒内调用some_方法()。在keypress方法中,您应该做的第一件事是使用clearTimeout取消/清除超时调用

some_method()还应该清除任何超时,然后发出http ajax请求

这里的净效果是ajax请求稍微延迟,但如果用户按下另一个键,则不会发生。或者换句话说,在用户停止/暂停输入之前,不要尝试触发ajx请求。100毫秒可能太高或太低,但希望您能理解

您还应该注意处理“服务器速度慢”的情况。考虑这一点:

  • 用户键入“hello”,暂停1秒,然后以“hello”作为参数触发ajax请求
  • 用户继续键入“world”,因此文本字段现在包含“hello world”,并停止键入
  • 您使用“helloworld”作为参数触发第二个ajax请求
  • 第二个请求(对于“hello world”)首先返回,您将更新您的UI
  • 第一个请求(对于“hello”)返回时,您将再次更新您的UI

哎呀!让服务器在返回给客户端的(json)数据中包含原始查询字符串。当客户端返回ajax数据时,请检查结果/数据是否用于与文本字段中当前内容匹配的查询(“hello”/“hello world”)。

有一个JQuery插件,它封装了前面的答案所说的内容。它叫。它允许用户在指定的毫秒数内停止键入文本字段后启动函数。我以前用过,效果很好。

太棒了!多亏了大家,你的回答都很有见地。我学到的真正问题是,我不知道如何随ajax请求发送变量。这个在这里

$("#test").load("TempJumpToAJAX.aspx", {searchText: $("#").val()});
还有mintywalker,谢谢你的洞察力。一切都很好

$("#test").load("TempJumpToAJAX.aspx", {searchText: $("#").val()});