вызов jQuery / Ajax - он не работает на IE7 - PullRequest
3 голосов
/ 10 июля 2010

Я создаю функцию Jquery, которая (на данный момент) вызывает функцию динамически и печатает ее с предупреждением. с Firefox, хром: это работает! когда я пытаюсь на IE7 (в первый раз), он терпит неудачу. Если я перезагружаю страницу (F5) и повторяю, это работает! о_О

Я, наконец, понимаю, почему это происходит. На моем старом сайте я использовал библиотеку jquery-1.3.2.min.js. На этом я использую jquery-1.4.2.js и на самом деле это не работает. Ну что, как поживаешь? Ошибка в этой новой версии?

ура

EDIT

фактические функции (с предложениями Брайана Уотерса):

// html page
<a href="#" onClick="pmNew('1');return false">prova</a>    

// javascript page
function pmNew(mexid) {
    var time = new Date;
    $.ajax({
        type: 'POST',
        cache: false,
        url: './asynch/asynchf.php' + '?dummy=' + time.getTime(),
        data: 'mexid='+escape(mexid)+'&id=pmnew',
        success: function(msg) {
            alert(msg);
        }
    });
    return false;
}

// ajax.php
if($_POST['id']=="pmnew") {
    echo "please, i will just print this";
}

Результат Fiddler: если я использую http://localhost/website Fiddler не захватывает поток. если я использую http://ipv4.fiddler/website, он захватывает поток, но при запросе ajax это не портит. если я обновлю страницу, да, это работает. мах ... я действительно не знаю, как решить эту проблему ...

Ответы [ 7 ]

2 голосов
/ 18 июля 2010

хорошо, я не совсем уверен, что проблема здесь, но я думаю, что вы, вероятно, могли бы это исправить, просто позволив jquery обрабатывать щелчок вместо встроенного атрибута тега.

сначала измените свою ссылку, чтобы избавиться от встроенного события

<a class="lblueb" href="./asynch/asynchf.php?mexid=<?$value?>"><?=value?></a>

затем в вашем javascript в заголовке вашей страницы добавьте функцию события document.ready, например, если у вас ее еще нет:

$(function(){

});

затем привяжите событие click к вашей ссылке внутри функции ready с помощью класса, чтобы он извлек mexid из атрибута href, а затем вызовите вашу функцию pmNew следующим образом:

$(".lblueb").click(function(e){

  e.preventDefault();

  //your query string will be in parts[1];
  parts = $(this).attr("href").split("?");
  //your mexid will be in mexid[1]
  mexid = $parts[1].split("="); 

  //call your function with mexid[1] as the parameter
  pmNew(mexid[1]);

});

Ваш окончательный код должен выглядеть следующим образом:

<script type="text/javascript">

function pmNew(mexid) {
    $.ajax({
        type: "POST",
        url: "./asynch/asynchf.php",
        data: "mexid="+mexid+"&id=pmnew",
        success: function(msg){
            $("#pmuser").html('<a class="bmenu" href="./index.php?status=usermain">PANEL ('+msg+')</a>');
        }
    });
}

//document.ready function
$(function(){

  $(".lblueb").click(function(e){

    //prefent the default action from occuring   
    e.preventDefault();

    //your query string will be in parts[1];
    parts = $(this).attr("href").split("?");

    //your mexid will be in mexid[1]
    mexid = $parts[1].split("="); 

    //call your function with mexid[1] as the parameter
    pmNew(mexid[1]);

  });

});

</script>
2 голосов
/ 21 августа 2010

Лучший способ отладки - это загрузить Fiddler и посмотреть, что происходит с HTML-трафиком, и если браузер даже делает запрос ajax, и в результате получается 200, 404 и т.

У меня были проблемы с кешированием IE даже на сообщениях. И даже не отправляя запросы. Я обычно создаю объект даты в javascript и добавляю фиктивную временную метку, чтобы сделать URL уникальным, чтобы он не кэшировался.

0 голосов
/ 05 августа 2010

Убедитесь, что содержимое, возвращаемое в DOM, действительно для указанного DOCTYPE .

У меня была похожая проблема с Chrome, FF и Safari, все работали просто отлично, но обнаружил, что результат ajax не работает в IE. Убедитесь, что у вас нет лишних элементов div или span в результате ajax, что нарушает вашу разметку.

0 голосов
/ 04 августа 2010

Похоже, что с этой проблемой сталкиваются несколько человек. Одному из них повезло с чистой установкой браузера:

http://www.geekstogo.com/forum/topic/22695-errorpermission-denied-code0/

0 голосов
/ 04 августа 2010

Я не понял "провал", но вот еще один пример ..

function pmNew(mexid) {
    $.post("./asynch/asynchf.php", {mexid: mexid, id: "pmnew"},
        function(msg) {
            $("#pmuser").html('<a class="bmenu" href="./index.php?status=usermain">PANEL ('+msg+')</a>');
        }
    });
}
0 голосов
/ 17 июля 2010

По привычке вы должны иметь дело с переменными вашего запроса в начале вашего скрипта и санировать их до смерти - затем назначить очищенные результаты новым переменным и строго соблюдать их только в оставшейся части скрипта.Таким образом, вы должны иметь тревожные звонки всякий раз, когда у вас есть переменная запроса в запросе sql или рядом с ним.

Например, по крайней мере, вы должны убирать любые html-теги из всего, что будет напечатано обратно вpage.

Это в дополнение к экранированию кавычек как части строки sql при вставке в базу данных.

Я за быстрое написание кода - конечно же, аккуратнокод позже ... но прежде чем что-либо делать, обеспечьте безопасность запросов.Позже вы не сможете взяться за безопасность.

В любом случае, извините за беспокойство ... Что касается вашей реальной проблемы, вы пробовали то, что предложил Габи: измените html на:

<a class="lblueb" href="#" onclick="return pmNew('<?php echo $value; ?>')"><?php echo $value; ?></a>

А затем обновите свою функцию JS:

function pmNew(mexid) {
    $.ajax({
        type: 'POST',
        cache: false,
        url: './asynch/asynchf.php',
        data: 'mexid=' + escape(mexid) + '&id=pmnew',
        success: function(msg) {
            $('#pmuser').html('<a class="bmenu" href="./index.php?status=usermain">PANEL (' + msg + ')</a>');
        }
    });
    return false;
}

Также с IE - проверьте очевидное.Очистить кеш браузера / историю

0 голосов
/ 11 июля 2010

Я полагаю, у вас есть ошибка в вашем коде SQL.userd должен быть userid?

Габи абсолютно прав, что ваш код SQL широко открыт для инъекций. Пожалуйста, рассмотрите обучение PDO , что значительно снизит вероятность внедрения SQL, особенно при использовании заполнителей.Таким образом, у вас будет запрос ($ sql) и выполнение ($ sql), а не код, поступающий непосредственно в вашу БД.

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