2010-05-19 7 views
0

J'ai une fonction php qui insère une barre de recherche dans chaque page d'un site web.

Le site vérifie si l'utilisateur a javascript activé et s'il le fait, insère des ajouts jquery ajax pour lier des cases de sélection (au lieu d'utiliser fallback onchange = "form.submit()"). $ .getJSON fonctionne parfaitement pour moi dans d'autres navigateurs sauf dans IE, si je fais une actualisation complète de la page (ctrl + F5) dans IE mon ajax fonctionne parfaitement jusqu'à ce que je navigue vers une nouvelle page (ou la même page avec $ PHP_SELF) soit par submiting la forme ou en cliquant sur un lien de la jquery onchange feux de fonction mais jquery jette une erreur:

détails de l'erreur de page Web

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 

Il semble que la fonction jquery .getJSON de $() est disparu???

Cela semble être une sorte de problème de mise en cache comme il arrive sur la deuxième chargement de la page, mais je crois que j'aller à la prévention de la mise en cache en place de toute façon, voici un snipet du code que les annonces les fonctions 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; 

rappelez-vous, cela fait partie d'une fonction php qui insère un script dans le code html et désolé si cela semble un peu en désordre, je suis nouveau à PHP et Javascript et je suis un peu en désordre aussi :)

S'il vous plaît rappelez-vous également que cela fonctionne parfaitement dans IE sur la première visite, mais après toute navigation, je reçois l'erreur.

+0

Vous devriez vraiment essayer de clarifier votre code, c'est une bonne pratique, et cela vous fera gagner beaucoup de temps lors du débogage. –

Répondre

3

D'accord, j'ai trouvé ma réponse. Le problème est avec IE et cette ligne de code dans la balise de chaque page Web:

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

j'avais mon tag déclarant jquery avant cette ligne et il a besoin d'aller après.

Cela doit être un bug dans IE. Ça provoque un résultat bizarre, n'est-ce pas?

+1

+1 J'ai juste eu cette même erreur et c'était la cause. Les merveilles de IE ... :) –

Questions connexes