2013-07-10 7 views
0

Я использую комбинацию PHP, AJAX и MYSQLI для загрузки предложений о том, что пользователь вводит (срабатывает при загрузке при каждом нажатии клавиши). Все это хорошо работает в chrome, ie10, firefox, safari и т. Д. Затем я попробовал его на IE9, и он просто отобразил «No Suggestions» (который я закодировал, если не нашел совпадений). Моя единственная мысль заключалась в том, что это может быть проблема кэширования, о которой я читал в google, но при попытке всех предложений. Я закончил там, где начал ... «Нет предложений». Итак, я в тупике. Вот код для моего AJAX:PHP, AJAX, MYSQLI и IE9 не выводятся, как ожидалось

function activelyLoad(passedInfo, insertInto, urlInLib) 
{ 
    if (passedInfo.length==0) 
    { 
    document.getElementById(insertInto).innerHTML=""; 
    return; 
    } 
if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
    xmlhttp=new XMLHttpRequest(); 
    } 
else 
    {// code for IE6, IE5 
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
xmlhttp.onreadystatechange=function() 
    { 
    if (xmlhttp.readyState==4 && xmlhttp.status==200) 
    { 
    document.getElementById(insertInto).innerHTML=xmlhttp.responseText; 
    } 
    } 
xmlhttp.open("GET","../lib/"+urlInLib+"?q="+passedInfo,true); 
xmlhttp.send(); 
} 

И вот один из PHP-файлов я загружаю в:

<?php 
include('config.inc.php'); 
header('Cache-Control: no-store, no-cache, must-revalidate'); 
header('Pragma: no-cache'); 
$full = $_GET['q']; 
$fullAr = explode(" ", $full); 
$count = count($fullAr); 
$var = $fullAr[0]; 
$query = "SELECT * FROM StudentInfo WHERE (StudentFirstName LIKE '%$var%' OR StudentPrefferedName LIKE '%$var%' OR StudentLastName LIKE '%$var%')"; 
$response = ""; 
if ($count >= 2) { 
    $var2 = $fullAr[1]; 
    $query = "SELECT * FROM StudentInfo WHERE ((StudentFirstName LIKE '%$var%' OR StudentPrefferedName LIKE '%$var%') AND StudentLastName LIKE '%$var2%') OR ((StudentFirstName LIKE '%$var2%' OR StudentPrefferedName LIKE '%$var2%') AND StudentLastName LIKE '%$var%')"; 
} 
$result = mysqli_query($connection, $query); 
$num_results = mysqli_num_rows($result); 
if ($num_results > 0) { 
while ($row = mysqli_fetch_array($result)) { 
    $id = $row['StudentID']; 
    $functionList = "\"activelyLoad($id, 'detDiv', 'addtable.php'),showElem('#details')\""; 
    $functionList2 = "\"logLoad($id), showElem('#contactDets')\""; 
    if(strcmp($row['StudentPrefferedName'], '') != 0){ 
    $response .= ("<tr><td>" . $row['StudentFirstName'] . " \"" . $row['StudentPrefferedName'] . "\" " . $row['StudentLastName'] . "</td><td><button type='button' onmousedown=" . $functionList . " onclick=" . $functionList2 . ">Get details</button></td></tr>"); 
    } 
    else{ 
     $response .= ("<tr><td>" . $row['StudentFirstName'] . " " . $row['StudentLastName'] . "</td><td><button type='button' onmousedown=" . $functionList . " onclick=" . $functionList2 . ">Get details</button></td></tr>"); 
    } 
} 
} 
else $response = "No suggestions"; 
echo($response); 
mysqli_close($connection); 
?> 

Вот соответствующий HTML вывод этой страницы в IE9:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<META HTTP-EQUIV=”Pragma” CONTENT=”no-cache”> 
<title>XXXXXXX</title> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js"></script> 
<script src="../lib/searchScripts.js"></script> 
</head> 
<body> 
<h1>XXXXXXXX</h1> 

<p>Please select one of the following options:</p> 
<ul> 
<li><a id="searchLink" href="#" onclick="showElem('#search')">Search for a student</a></li> 

<div id="search"> 
<p><b>To find a student, start typing a name in the input field below:</b></p> 
<form> 
Student Name: <input type="text" onkeyup="activelyLoad(this.value, 'txtHint', 'gethint.php'), showElem('#suggestions')"> 
</form> 
<div id="suggestions"><h2>Suggestions:</h2> <div id="suggestionsBox"><table id="txtHint"><tr><td>No Suggestions</td></tr></table></div></div> 

Единственное, что заставляет меня думать, что это проблема с кешем, заключается в том, что это РАБОТАЕТ во всех современных современных браузерах. Любая помощь приветствуется.

EDIT консоль IE9 возвращает

SCRIPT600: Invalid target element for this operation. for 'document.getElementById(insertInto).innerHTML=xmlhttp.responseText;' 

Это моя проблема? Как это недействительно? Как браузер может добраться до AJAX, чтобы загрузить «Нет предложений», если он здесь неисправен?

+0

Lovely [SQL injection attack] (http://bobby-tables.com) дыры в вашем коде ... Наслаждайтесь наличием вашего сервера pwn3d. –

+0

опубликуйте свой сгенерированный html. проблемы с кросс-браузером всегда будут проблемой html. – Guerra

+0

Является ли '$ id' числом? IE9 может не понравиться числовым идентификаторам, поскольку они не разрешены в HTML4. – Barmar

ответ

0

Среди многих других проблем вы пытаетесь сбрасывать результаты AJAX в элемент <table> как свойство .innerHTML.

Internet Explorer имеет ошибка, что не позволит вам установить содержание table тега через .innerHTML пока ошибка не будет исправлена ​​в IE10

Отчет об ошибке: http://webbugtrack.blogspot.ca/2007/12/bug-210-no-innerhtml-support-on-tables.html

You было бы лучше создать <div> и установить вместо этого .innerHTML.

+0

Спасибо. Я пошел дальше и использовал метод POST JQuery и смог продолжить использовать мою настройку таблицы, которая имела дизайнерские преимущества для меня. – relevantsam

 Смежные вопросы

  • Нет связанных вопросов^_^