jquery .get / .post不工作​​ie 7或8,在ff中工作正常

时间:2009-05-01 14:42:15

标签: javascript jquery ajax

我基本上在页面上有这个:

<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 -&gt; Accounting -&gt; 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

10 个答案:

答案 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 HelperFiddler来记录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可能很挑剔。