Я создаю функцию JQuery, которая (на данный момент) вызывает функцию динамически и печатает ее с предупреждением. с firefox, хром: он работает! когда я пытаюсь использовать IE7 (первый раз), он терпит неудачу. Если я перезагрузите страницу (F5) и повторю, это сработает! о_О
Я НАКОНЕЦ понимаю, почему это происходит. На моем старом веб-сайте я использовал библиотеку jquery-1.3.2.min.js. На этом я использую jquery-1.4.2.js, и на самом деле он не работает. Ну что, как поживаешь? Ошибка в этой новой версии?
ура
фактические функции (с предложениями Bryan Waters):
// 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 не работает. если я обновляю страницу, да, это работает. мах … я действительно не знаю, как решить эту проблему …
Лучший способ отладки – загрузить Fiddler и посмотреть, что происходит в HTML-трафике, и если браузер даже делает запрос ajax, а какой результат – 200 или 404 или что-то еще.
У меня были проблемы с кэшированием IE даже на сообщениях. И даже не отправляя запросы. Обычно я создаю объект даты в javascript и добавляю фиктивную метку времени, чтобы сделать URL уникальным, поэтому он не будет кэшироваться.
хорошо, я не совсем уверен, что проблема здесь, но я думаю, вы могли бы исправить это, просто разрешив 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>
Я считаю, что у вас есть ошибка в коде SQL. Предполагается ли userid
?
Gaby абсолютно прав, что ваш SQL-код широко открыт для инъекций. Пожалуйста, подумайте об обучении PDO , что значительно снизит вероятность внедрения SQL-инъекций, особенно при использовании заполнителей. Таким образом, у вас будет запрос ($ sql) и execute ($ sql), а не код, идущий непосредственно в вашу БД.
По привычке вы должны иметь дело с вашими переменными запроса на ранней стадии вашего сценария и дезактивировать их до смерти – затем назначьте очищенные результаты новым переменным и будьте строгими, используя их только в остальной части скрипта. Таким образом, вы должны иметь сигналы тревоги, звонящие всякий раз, когда у вас есть переменная запроса в или рядом с sql-запросом.
Например, по крайней мере, вы должны лишить любые html-теги из всего, что будет распечатано на странице.
Это в дополнение к экранированию цитат как часть строки 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 – проверьте очевидное. Очистить кеш браузера / историю
Я не понял «провал», но вот еще один пример.
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>'); } }); }
Похоже, что этот вопрос сталкивается с несколькими людьми. Один из них повезло с чистой установкой браузера:
http://www.geekstogo.com/forum/topic/22695-errorpermission-denied-code0/
Убедитесь, что содержимое, возвращаемое в DOM, действительно для указанного DOCTYPE .
У меня была аналогичная проблема с Chrome, FF и Safari, все работали нормально, но результат ajax был сломан в IE. Убедитесь, что у вас нет лишних div или интервалов в результате ajax, нарушающих вашу разметку.