【发布时间】:2009-12-03 16:21:43
【问题描述】:
我有一个带有输入框的页面,其 onkeyup 根据输入的内容(搜索字段)触发 JQuery ajax 帖子
ajax 调用的回传 html 应该填充页面上的另一个 div。
这里是 jquery ajax 帖子:
var o = $(me.results).empty().addClass("aj3load");
$.ajax({
type: "POST",
dataType: "text",
url: me.url,
data: "cmd="+escape(me.cmd)+"&q="+q+"&"+me.args,
cache: false,
complete: function() {
$(o).removeClass("aj3load");
me.ls = q;
},
success: function(msg){
$(ajax3.results)
.html(msg)
.find("div")
.click(function(){
var crs_id = $(this).find(":hidden").val();
$(ajax3.field).val($(this).text());
$(ajax3.vf).val(crs_id);
$(ajax3.results).empty().slideUp("fast");
ajax3.ls = $(this).text();
getEventInfo();
});
}
});
这是搜索“eve”时来自 ajax 调用的响应(每个 Fiddler):
HTTP/1.1 200 OK
Cache-Control: private
Date: Thu, 03 Dec 2009 16:16:05 GMT
Content-Type: text/html
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Vary: Accept-Encoding
Content-Length: 882
<div><input type="hidden" value="1000806" />111_Demo_Event_090924</div>
<div><input type="hidden" value="1000811" />123 Test Event oct 12 2009</div>
<div><input type="hidden" value="1000805" />AAA_Demo_Event</div>
<div><input type="hidden" value="1000103" />Developing Algebraic Thinking in Grades 3-5 - 30hr</div>
<div><input type="hidden" value="1000086" />Developing Algebraic Thinking in Grades K-2 - 30hr</div>
<div><input type="hidden" value="1000144" />Facilitating Oral Language Development (Grades PreK-3) - 30hr</div>
<div><input type="hidden" value="1000613" />Free PBS TeacherLine Event</div>
<div><input type="hidden" value="1000088" />Math in Everyday Life for Grades 6-8 - 15hr</div>
<div><input type="hidden" value="1000087" />Math in Everyday Life for Grades K-5 - 15hr</div>
<div><input type="hidden" value="1000163" />Using Multimedia to Develop Understanding - 30hr</div>
现在在 Firefox 和 chrome 中,所有这些 div 都显示得很好,但在 IE 中,只有第一个 div 显示在页面上的容器 div 中。
知道这里的 IE 出了什么问题吗?
更新: 如果我输入警报(“hello world”);在我分配 $(ajax3.results).html(msg)... 之后,调用 IE 将正确呈现 ajax 帖子响应。这不是一个解决方案,只是可能有助于调试。我不想在处理过程中出现警报框。我还发现这个问题似乎不会影响 IE 8,只会影响早期版本。
谢谢
【问题讨论】:
-
如果您在 Ajax 请求的回调中显示代码会很有用。
-
我将您的 div 复制到字符串变量
msg,然后运行 $("#mydiv").html(msg);没有问题,这让我相信问题出在页面的其他部分。您确定 AJAX 调用正在返回 IE 中的所有这些事件吗?您也可以考虑在您的问题中添加有关该页面的更多信息(其他正在运行的脚本等)。 -
谢谢杰夫。使用 Fiddler,我能够从 ajax 调用(我在我的问题中列出)中看到整个回发值。我真的很困惑为什么 IE 只会显示返回的第一个元素。由于它适用于 Firefox 和 Chrome,我假设我的 javascript 是正确的(ie 和 firebug 都没有显示任何 js 错误)。
-
确实令人费解——我能建议的只是削减你的脚本以尽可能减少,看看你是否能找出原因。我首先注释掉
complete回调和添加aj3load类的代码部分,如果这隐藏了div,看看是否有帮助。 Blasted IE - 当你弄明白的时候请更新这个! -
为了解决这个问题,我只是将输出更改为选择列表中的选项。
标签: html ajax internet-explorer jquery rendering