所以我试图从.aspx页面加载一些返回的html,但是在执行AJAX请求所依赖的东西之前需要触发click事件。更具体地说,我这样做。当用户键入文本字段时,将运行此功能...
function KeyPress() {
$("#" + HiddenButtonId).click();
$("#test").load("TempJumpToAJAX.aspx");
}
然后$(“#”+ HiddenButtonId).click();确实在文件后面的代码中设置了一些会话数据。具体地说...
Session["SearchText"] = Search.Text;
然后,$(“#test”)。load(“TempJumpToAJAX.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();
问题是,顺序似乎搞砸了,它首先试图附加Session [“SearchText”],然后运行click事件运行的代码。所以它的功能更像......
function KeyPress() {
$("#test").load("TempJumpToAJAX.aspx");
$("#" + HiddenButtonId).click();
}
命令反转的位置。所以实际发生的是会话变量有一个空字符串,而不是用户在文本框中键入的字符串。对我来说奇怪的是它似乎不应该有一个空字符串,似乎它应该什么都没有,因为此时会话变量尚未初始化为任何东西。我真的不知道发生了什么。我想,这可能会让我缺乏经验。有什么想法吗?
答案 0 :(得分:3)
你在这里混合技术。 hiddenButtonID click事件试图对页面进行完整的回发,而AJAX调用不会进行回发。没有理由回复邮件,然后通过AJAX调用进行跟进。 AJAX的目的是消除回发页面的需要,而只是使用对服务器的小回调重新加载页面上的少量HTML。您应该在AJAX调用参数中将该数据传递给服务器,而不是访问HiddenButtonID单击事件处理程序中的搜索文本框文本。
以下客户端脚本应该这样做。
function KeyPress() {
$("#test").load("TempJumpToAJAX.aspx", {searchText: $("#").val()});
}
在此代码中,您将获取搜索文本框的ID,然后使用jQuery检索该文本框的值。这将作为名为'searchText'的POST变量传递给TempJumpToAJAX.aspx页面。您应该可以通过访问'TempJumpToAJAX.aspx'页面中的Request ['searchText']变量来访问此数据。
答案 1 :(得分:1)
您正在做的另一个智能扩展是,只要按下某个键,就不会执行ajax调用。如果用户快速输入一个长单词,您将获得多个ajax http请求,这些请求的触发速度超过了他们返回和更新UI的速度。
这会增加您的服务器负载,并可能使客户端的UI缓慢。
相反,onkeypress,存储所有适当的细节,然后调用
var timeout = setTimeout('some_method()',100);
其中说100毫秒内调用some_method()。您在按键方法中应该做的第一件事是使用clearTimeout取消/清除超时调用。
http://www.w3schools.com/js/js_timing.asp
some_method()也应该清除任何超时,然后发出http ajax请求。
此处的净效果是您的ajax请求稍有延迟,但如果用户按下另一个键则永远不会发生。换句话说,在用户停止/暂停键入之前,请勿尝试触发ajx请求。 100毫秒可能太高或太低,但你希望得到这个想法!
您还应该注意处理“慢速服务器”的情况。考虑一下:
哎呀!让服务器在其返回给客户端的(json)数据中包含原始查询字符串。当客户端获取ajax数据时,检查结果/数据是否与查询(“hello”/“hello world”)匹配,该查询与当前文本字段中的匹配。
答案 2 :(得分:1)
有一个JQuery插件封装了前面的答案所讨论的内容。它被称为TypeWatch。它允许在用户停止在文本字段中键入指定的毫秒数后触发函数。我以前用过它并且效果很好。
答案 3 :(得分:1)
真棒!感谢大家,所有答案都非常有见地。我学到的真正问题是我不知道如何使用该ajax请求发送变量。在这里。
$("#test").load("TempJumpToAJAX.aspx", {searchText: $("#").val()});
也是mintywalker,感谢您的洞察力。这一切都很好。