我基本上在页面上有这个:
<script type="text/javascript">
function refresh_context() {
$("#ajax-context").html("Searching...");
$.get("/ajax/ldap_search.php", {cn: $("#username").val()}, function(xml) {
$("#ajax-context").html($("display", xml).text());
$("#context").val($("context", xml).text());
}, 'xml');
}
$(document).ready(function() {
$("#username").blur(refresh_context);
});
</script>
<input type="text" name="username" id="username" maxlength="255" value="" />
<input type="hidden" name="context" id="context" value=""/>
<div id="ajax-context"></div>
它应该做什么(在Firefox上做得很好)就是当你在#username字段中输入用户名时,它会运行/ajax/ldap_search.php?cn=$username,它会在我们公司的ldap中搜索用户名并返回它的原始上下文和上下文的格式化版本,如下所示:
<result>
<display>Staff -> Accounting -> John Smith</display>
<context>cn=jsmith,ou=Accounting,ou=Staff,ou=Users,o=MyOrg</context>
</result>
格式化版本(显示)转到div#ajax-context并转到隐藏输入#context。 (另外, - &gt;实际上是 - “&amp; g t;”(没有空格))。
然而,在IE上,div仍然停留在“搜索...”上,隐藏的输入值保持空白。
我已经尝试了.get和.post,但都没有工作。我确定它在.get上失败了因为如果我试试这个,我甚至都没有得到警报:
$.get("/ajax/ldap_search.php", {cn: $("#username").val()}, function() {
alert("Check");
});
此外,IE不会给我任何脚本错误。
编辑:添加了“$(document).ready(function(){”,我的代码中已经包含了.blur,但我忘了将其包含在我的帖子中。
编辑2:正在发送请求并且apache2正在接收它:
10.135.128.96 - - [01/May/2009:10:04:27 -0500] "GET /ajax/ldap_search.php?cn=i_typed_this_in_IE HTTP/1.1" 200 69
答案 0 :(得分:7)
问题出在ldap_search.php文件中。 我有这个(根据我在某人的博客上读到的一个例子):
header("content-type:application/xml-xhtml;charset=utf-8");
IE实际上需要这样才能正确阅读:
header("content-type:application/xml;charset=utf-8");
上帝,我讨厌IE。
答案 1 :(得分:4)
尝试更改:
$("#username").blur(refresh_context);
要:
$(function(){
$("#username").blur(refresh_context);
});
这将暂停分配blur
事件,直到加载整个页面。
可能是在XML文本中使用>
吗?
答案 2 :(得分:2)
将您的类型设置为“xml”
jQuery.get(url,[data],[callback],[type])
$.get("/ajax/ldap_search.php", {cn: $("#username").val()}, function() {
alert("Check");
},'xml');
答案 3 :(得分:1)
你能看出Ajax请求是否被解雇了吗?
您可以使用Web Development Helper或Fiddler来记录Ajax请求。
作为一般的良好实践,您应该包含访问$(document).ready
函数中的DOM的任何jQuery代码。这将确保在加载整个DOM之前它不会执行,尽管在这种情况下,如果div正在更改为“正在加载...”,它看起来不会导致问题。
<script type="text/javascript">
function refresh_context() {
$("#ajax-context").html("Searching...");
$.get("/ajax/ldap_search.php", {cn: $("#username").val()}, function(xml) {
$("#ajax-context").html($("display", xml).text());
$("#context").val($("context", xml).text());
}, "xml"); // As pointed out, you should specify the return type
}
$(document).ready(function() {
$("#username").blur(refresh_context);
});
</script>
答案 4 :(得分:1)
您可能希望将$.get调用更改为$.ajax调用,以便设置错误处理程序以查看错误原因。
我记得,这是这样做的:
$.ajax({
type: 'GET',
url: "/ajax/ldap_search.php",
data: {cn: $("#username").val()},
success: function(response) { /* do something here */ },
error: function(xhr, type, exception) { alert("Error: " + type); }
})
异常对象也应该有关于错误的更多细节。
答案 5 :(得分:1)
我有同样的问题,但没有xml - 我有简单的html作为ajax-return。标题( “内容类型:文本;字符集= UTF-8”);是解决方案。
答案 6 :(得分:1)
不起作用:
$.post("/welcome/add_mail", function(data){
alert('ok');
});
在IE7中使用基本网址正常工作:
$.post("http://localhost/welcome/add_mail", function(data){
alert('ok');
});
答案 7 :(得分:0)
通常使用$ .get / $。post你必须指定返回类型。这使得jquery更容易a)识别它的内容并且b)为你解码它。
这可能有所帮助。
答案 8 :(得分:0)
而不是$(“display”,xml).text()
也许尝试:$(xml).find(“display”)。text()
您能看到响应是什么,还是只是超时?你能看出寄送的是什么吗?如果没有,请展开您的:
function refresh_context() {
$("#ajax-context").html("Searching...");
$.get("/ajax/ldap_search.php", {cn: $("#username").val()}, function(xml) {
$("#ajax-context").html($("display", xml).text());
$("#context").val($("context", xml).text());
}, "xml"); // As pointed out, you should specify the return type
}
到
function refresh_context() {
$("#ajax-context").html("Searching...");
$.get("/ajax/ldap_search.php", {cn: $("#username").val()}, function(xml) {
var displayXml = $("display", xml).text();
$("#ajax-context").html(displayXml);
var contextXml = $("context", xml).text();
$("#context").val(contextXml);
}, "xml"); // As pointed out, you should specify the return type
}
然后调试脚本。
答案 9 :(得分:0)
我有类似的问题,但加载JSON。 $ .ajax修复程序对我有用但我也发现在我的情况下它与URL有关。当我使用时:
$.getJSON('',{ ajax: "addressPicker",OID:pickIDNo,s:pickVal}, function(data) {
我会得到一个无声的响应,但是当我用'''替换空URL''时有效。在您的情况下,URL存在,但URL可能很挑剔。