Jag undrar lite varför jag inte får detta att fungera.
I php-filen skrives det ut om inget hittades en sha1-hash.
Jag jämför i javascriptet om jag får denna hash, och om jag får det så ska det skrivas ut "Hittades inte". Problemet är att det inte skriver ut "Hittade inte". Inget ändras.
ajax_search.js
//Called when the AJAX response is returned.
function handleSearchSuggest() {
if (searchReq.readyState == 4) {
var ss = document.getElementById('search_suggest');
ss.innerHTML = '';
var str = searchReq.responseText.split("\n");
for(i=0; i < str.length - 1; i++) {
[B][red]if(str == "b6589fc6ab0dc82cf12099d1c2d40ab994e8410c"){
ss.innerHTML = "<div class=\"suggest_link\">Hittade inget!</div>";[/red][/B]
}else{
//Build our element string. This is cleaner using the DOM, but
//IE doesn't support dynamically added attributes.
var suggest = '<div onmouseover="suggestOver(this);" ';
suggest += 'onmouseout="suggestOut(this);" ';
suggest += 'onclick="setSearch(this.innerHTML);" ';
suggest += 'class="suggest_link">' + str[i] + '</div>';
ss.innerHTML += suggest;
}
}
}
}
Jag har provat med searchReq.responseText == "b65..." men det funkade inte heller.
Du skickar aldrig med \n när du skickar tillbaka hashen. Då blir splittningen 1 långt, vilket inte uppfyller kravet i din for-loop. då 0<0 är falskt, du tar ju längden -1.
Det är vid såna här tillfällen som JSON är perfekt att returnera från den andra sidan. Då slipper du splitta och hålla på själv. Bara att bygga upp en array och köra json_encode() på den via php. Sedan evaluerar/går igenom jsonen och får en array. :)
Kort sagt så kan du plocka ut värdena från databasen, direkt som en array. Därefter så json-encodar du dem, vilket innebär att arrayen blir en sträng som följer javascript object literal, denna strängen som du returnerar tillbaka kommer att se ut nåt sånt här kke:
["Värde 1","Värde 2"]
Får du värdena från en källa du _vet_ är säker kan du köra eval på dem direkt och få ut en array i javascript:
var str = eval(searchReq.responseText) // searchReq.responseText är lika med ["Värde 1","Värde 2"]
Eftersom du kör eval på strängen kan man säga att du har gjort så här:
var str = new Array("Värde 1","Värde 2");
alert(str[0]) //visar "Värde 1"
alert(str[1]) //visar "Värde 2"
Är du däremot inte helt säker på källan som värdena kommer ifrån kan du använda en JSON-parser. Mer info om den finns på en av länkarna jag angav ovan.