jquery .get / .post не работает на 7 или 8, отлично работает в FF - PullRequest
3 голосов
/ 01 мая 2009

У меня есть в основном это на странице:

<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. (Кроме того, -> на самом деле - "& 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 ]

7 голосов
/ 01 мая 2009

Проблема была в файле ldap_search.php. У меня было это (основываясь на примере, который я прочитал в чьем-то блоге):

header("content-type:application/xml-xhtml;charset=utf-8");

На самом деле это должно быть так, чтобы IE правильно его читал:

header("content-type:application/xml;charset=utf-8");

Боже, я ненавижу IE.

4 голосов
/ 01 мая 2009

Попробуйте изменить:

$("#username").blur(refresh_context);

Кому:

$(function(){
    $("#username").blur(refresh_context);
});

Это будет удерживать при назначении события blur, пока не будет загружена вся страница.

Edit:

Может ли это быть использование > в тексте XML?

2 голосов
/ 01 мая 2009

установите ваш тип 'xml'

jQuery.get (url, [data], [callback], [type])

$.get("/ajax/ldap_search.php", {cn: $("#username").val()}, function() {
    alert("Check");
},'xml');
1 голос
/ 03 июня 2011

Не работает:

$.post("/welcome/add_mail", function(data){
       alert('ok');   
});

Прекрасно работает с базовым URL в IE7:

$.post("http://localhost/welcome/add_mail", function(data){
       alert('ok');   
});
1 голос
/ 09 сентября 2010

У меня была такая же проблема, но не с xml - у меня был простой html как ajax-return. Заголовок ( "Content-Type: текст; кодировка = UTF-8"); было решение.

1 голос
/ 01 мая 2009

Возможно, вы захотите изменить вызов $. 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); }
})

Объект исключения также должен иметь более подробную информацию об ошибке.

1 голос
/ 01 мая 2009

Можете ли вы узнать, запущен ли запрос Ajax?

Вы можете использовать Помощник по веб-разработке или Fiddler для регистрации запросов Ajax.

Как правило, вы должны заключать любой код jQuery, который обращается к DOM, в функцию $(document).ready. Это гарантирует, что он не будет работать до тех пор, пока не будет загружена вся 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>
0 голосов
/ 15 апреля 2011

У меня была похожая проблема, но при загрузке JSON. Исправление $ .ajax работало для меня, но я также обнаружил, что в моем случае это было связано с URL. Когда я использую:

$.getJSON('',{ ajax: "addressPicker",OID:pickIDNo,s:pickVal}, function(data) {

Я получил бы тихий ответ, но когда я заменил пустой URL '' на '?' это сработало. В вашем случае URL-адрес присутствовал, но он может быть требователен к URL-адресу.

0 голосов
/ 01 мая 2009

Вместо $ ("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
}

и затем отладка скрипта.

0 голосов
/ 01 мая 2009

Обычно с $ .get / $. Post вы должны указать тип возвращаемого значения. Это облегчает для jquery а) распознавать то, что он ищет, и б) декодировать его для вас.

Это может помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...