jquery $ .getJSON работает только один раз в Internet Explorer - PullRequest
0 голосов
/ 19 мая 2010

У меня есть функция php, которая вставляет панель поиска на каждую страницу веб-сайта.

Сайт проверяет, включен ли у пользователя javascript, и, если он это делает, вставляет некоторые jquery ajax для связывания полей выбора (вместо использования его fallback onchange = "form.submit ()").

$. GetJSON отлично работает для меня в других браузерах, кроме IE, если я выполняю полное обновление страницы (ctrl + F5) в IE, мой ajax работает без сбоев, пока я не перейду на новую страницу (или ту же страницу с $ PHP_SELF). ) либо отправив форму или нажав ссылку, функция jquery onchange срабатывает, но затем jquery выдает ошибку:

Сведения об ошибке веб-страницы

Message: Object doesn't support this property or method

Line: 123

Char: 183

Code: 0

URI: http://~#UNABLE~TO~DISCLOSE#~/jquery-1.4.2.min.js

Кажется, что функция jquery $ .getJSON () исчезла ???

Кажется, это какая-то проблема с кэшированием, возникающая при загрузке второй страницы, но я думаю, что в любом случае я принял меры по предотвращению кэширования, вот фрагмент кода, который рекламирует функции jquery:

if (isset($_SESSION['NO_SCRIPT']) == true && $_SESSION['NO_SCRIPT'] == false)
        {
            $html .= '<script type="text/javascript" charset="utf-8">';
            $html .= '$.ajaxSetup({ cache: false });';
            $html .= '$.ajaxSetup({"error":function(XMLHttpRequest,textStatus, errorThrown) {   
                        alert(textStatus);
                        alert(errorThrown);
                        alert(XMLHttpRequest.responseText);
                        }});';
            $html .= '</script>';

            $html .= '<script type="text/javascript" charset="utf-8">';
            $html .= '$(function(){  $("select#searchtype").change(function() { ';
            $html .= 'alert("change fired!"); ';
            $html .= '$.getJSON("ajaxgetcategories.php", {id: $(this).val()}, function(j) { ';
            $html .= 'alert("ajax returned!"); ';
            $html .= 'var options = \'\'; ';
            $html .= 'options += \'<option value="0" >--\' + j[0].all + \'--</option>\'; ';
            $html .= 'for (var i = 0; i < j.length; i++) { options += \'<option value="\' + j[i].id + \'">\' + j[i].name + \'</option>\'; } ';
            $html .= '$("select#searchcategory").html(options); }) }) }) ';
            $html .= '</script> ';

            $html .= '<script type="text/javascript" charset="utf-8"> ';
            $html .= '$(function(){  $("select#searchregion").change(function() { ';
            $html .= 'alert("change fired!"); ';
            $html .= '$.getJSON("ajaxgetcountries.php", {id: $(this).val()}, function(j) { ';
            $html .= 'alert("ajax returned!"); ';
            $html .= 'var options = \'\'; ';
            $html .= 'options += \'<option value="0" >--\' + j[0].all + \'--</option>\'; ';
            $html .= 'for (var i = 0; i < j.length; i++) { options += \'<option value="\' + j[i].id + \'">\' + j[i].name + \'</option>\'; } ';
            $html .= '$("select#searchcountry").html(options); }) }) }) ';
            $html .= '</script> ';
        }; return $html;

помните, это часть функции php, которая вставляет скрипт в html, и извините, если он выглядит немного грязно, я новичок в PHP и Javascript, и я тоже немного неопрятен:)

Пожалуйста, помните, что это прекрасно работает в IE при первом посещении, но после любой навигации я получаю сообщение об ошибке.

1 Ответ

3 голосов
/ 19 мая 2010

Хорошо, я нашел свой ответ. Проблема с IE и этой строкой кода в теге каждой веб-страницы:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

У меня был тег, объявляющий jquery до этой строки, и он должен идти после.

это должно быть ошибка в IE. Это вызывает странный результат, не правда ли?

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