Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    417

    suggest autocompletamento

    Sono alle prese da giorni con un problema
    Ho ricavato dal libro AJAX e PHP il codice per fare un suggest con autocompletamento, ho provato con tutti i browser ma non funziona mi dà sempre l'errore
    Error accessing the server!
    TypeError: xmlHttpGetSuggestions.responseXML is null
    ho letto è riletto ma è sempre tutto giusto, cosa potrebbe essere? a postare il codice è troppo lungo ma se serve lo incollo Grazie

  2. #2
    Utente di HTML.it L'avatar di carlomarx
    Registrato dal
    Oct 2009
    Messaggi
    1,669
    Questo non è un forum di indovini. Incolla il codice, possibilmente riscritto in una forma più sintetica (è nel tuo interesse consentire al più largo numero di persone possibile di capire dove sta l'errore). Non c'è bisogno che mandi anche la parte PHP. Dal tipo di errore si capisce già che il problema sta nella parte JavaScript...:
    responseXML: The response to the request as a DOM Document object, or null if the request was unsuccessful, has not yet been sent, or cannot be parsed as XML. The response is parsed as if it were a text/xml stream. Read-only.

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    417
    ecco il codice della pagina suggest.js
    penso sia in qusta pagina l'errore

    var getFunctionsUrl = "suggest.php?keyword=";
    var PhpHelpUrl="http://www.php.net/manual/en/function.";
    var httpRequestKeyword = "";
    var userKeyword = "";
    var suggestions = 0;
    var suggestionMaxLength = 10;
    var isKeyUpDownPressed = false;
    var autocompletedKeyword = "";
    var hasResults = false;
    var timeoutId = -1;
    var position = -1;
    var oCache = new Object();
    var minVisiblePosition = 0;
    var maxVisiblePosition = 9;
    var debugMode = true;
    var xmlHttpGetSuggestions = createXmlHttpRequestObject();
    window.onload = init;
    function createXmlHttpRequestObject()
    {
    var xmlHttp;
    try
    {
    xmlHttp = new XMLHttpRequest();
    }
    catch(e)
    {
    var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0", "MSXML2.XMLHTTP.5.0",
    "MSXML2.XMLHTTP.4.0",
    "MSXML2.XMLHTTP.3.0",
    "MSXML2.XMLHTTP",
    "Microsoft.XMLHTTP");
    for (var i=0; i < XmlHttpVersions.length && !xmlHttp; i++)
    {
    try
    {
    xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
    }
    catch (e) {}
    }
    }
    if (!xmlHttp)
    alert ("Errore durante la creazione dell'oggetto XMLHttpRequest.");
    else
    return xmlHttp;
    }
    function init()
    {
    var oKeyword = document.getElementById("keyword");
    oKeyword.setAttribute("autocomplete", "off");
    oKeyword.value = "";
    oKeyword.focus();
    setTimeout("checkForChanges()", 500);
    }
    function addToCache(keyword, values)
    {
    oCache[keyword] = new Array();
    for (i=0; i<values.length; i++)
    oCache[keyword][i] = values[i];
    }
    function checkCache(keyword)
    {
    if (oCache[keyword])
    return true;
    for (i=keyword.length-2; i>=0; i--)
    {
    var currentKeyword = keyword.substring(0, i+1);
    if (oCache[currentKeyword])
    {
    var cacheResults = oCache[currentKeyword];
    var keywordResults = new Array();
    var keywordResultsSize = 0;
    for (j=0; j<cacheResults.length; j++)
    {
    if (cacheResults[j].indexOf(keyword) == 0)
    keywordResults[keywordResultsSize++] = cacheResults[j];
    }
    addToCache(keyword, keywordResults);
    return true;
    }
    }
    return false;
    }
    function getSuggestions(keyword)
    {
    if (keyword != "" && !isKeyUpDownPressed)
    {
    isInCache = checkCache(keyword);
    if (isInCache == true)
    {
    httpRequestKeyword=keyword;
    userKeyword=keyword;
    displayResults(keyword, oCache[keyword]);
    }
    else
    {
    if(xmlHttpGetSuggestions)
    {
    try
    {
    if (xmlHttpGetSuggestions.readyState == 4 || xmlHttpGetSuggestions.readyState == 0)
    {
    httpRequestKeyword = keyword;
    userKeyword = keyword;
    xmlHttpGetSuggestions.open("GET", getFunctionsUrl + encode(keyword), true);
    xmlHttpGetSuggestions.onreadystatechange = handleGettingSuggestions;
    xmlHttpGetSuggestions.send(null);
    }
    else
    {
    userKeyword = keyword;
    if(timeoutId != -1)
    clearTimeout(timeoutId);
    timeoutId = setTimeout("getSuggestions(userKeyword)", 500);
    }
    }
    catch(e)
    {
    displayError("Impossibile collegarsi al server:\n" + e.toString());
    }
    }
    }
    }
    }
    function xmlToArray(resultsXml)
    {
    var resultsArray = new Array();
    for (i=0; i<resultsXml.length; i++)
    resultsArray[i] = resultsXml.item(i).firstChild.data;
    return resultsArray;
    }
    function handleGettingSuggestions()
    {
    if (xmlHttpGetSuggestions.readyState == 4)
    {
    if (xmlHttpGetSuggestions.status == 200)
    {
    try
    {
    updateSuggestions();
    }
    catch(e)
    {
    displayError(e.toString());
    }
    }
    else
    {
    displayError("C'è stato un problema nel recupero dei dati:\n" + xmlHttpGetSuggestions.statusText);
    }
    }
    }
    function updateSuggestions()
    {
    var response = xmlHttpGetSuggestions.responseText;
    if (response.indexOf("ERRNO") >= 0 || response.indexOf("error:") >= 0 || response.length == 0)
    throw(response.length == 0 ? "void server response." : response);
    response = xmlHttpGetSuggestions.responseXML.documentElement;
    nameArray = new Array();
    if(response.childNodes.length)
    {
    nameArray = xmlToArray(response.getElementsByTagName("name"));
    }
    if(httpRequestKeyword == userKeyword)
    {
    displayResults(httpRequestKeyword, nameArray);
    }
    else
    {
    addToCache(httpRequestKeyword, nameArray);
    }
    }
    function displayResults(keyword, results_array)
    {
    var div = "<table>";
    if (!oCache[keyword] && keyword)
    addToCache(keyword, results_array);
    if (results_array.length == 0)
    {
    div += "<tr><td>Nessun risultato per " + keyword + "</td></tr>";
    hasResults = false;
    suggestions = 0;
    }
    else
    {
    position = -1;
    isKeyUpDownPressed = false;
    hasResults = true;
    suggestions = oCache[keyword].length;
    for (var i=0; i<oCache[keyword].length; i++)
    {
    crtFunction = oCache[keyword][i];
    crtFunctionLink = crtFunction;
    while(crtFunctionLink.indexOf("_") !=-1)
    crtFunctionLink = crtFunctionLink.replace("_","-");
    div += "<tr id='tr" + i + "' onclick='location.href=document.getElementById(\"a " + i + "\").href;' onmouseover='handleOnMouseOver(this);' " + "onmouseout='handleOnMouseOut(this);'>" + "<td align='left'><a id='a" + i + "'href='" + phpHelpUrl + crtFunctionLink + ".php";
    if(crtFunction.length <= suggestionMaxLength)
    {
    div += "'>" + crtFunction.substring(0, httpRequestKeyword.length) + ""
    div += crtFunction.substring(httpRequestKeyword.length, crtFunction.length) + "</a></td></tr>";
    }
    else
    {
    if(httpRequestKeyword.length < suggestionMaxLength)
    {
    div += "'>" + crtFunction.substring(0, httpRequestKeyword.length) + ""
    div += crtFunction.substring(httpRequestKeyword.length, suggestionMaxLength) + "</a></td></tr>";
    }
    else
    {
    div += "'>" + crtFunction.substring(0, suggestionMaxLength) + "</td></tr>";
    }
    }
    }
    }
    div += "</table>";
    var oSuggest = document.getElementById("suggest");
    var oScroll = document.getElementById("scroll");
    oScroll.scrollTop = 0;
    oSuggest.innerHTML = div;
    oScroll.style.visibility = "visible";
    if (results_array.length > 0)
    autocompleteKeyword();
    }
    function checkForChanges()
    {
    var keyword = document.getElementById("keyword").value;
    if(keyword == "")
    {
    hideSuggestions();
    userKeyword = "";
    httpRequestKeyword="";
    }
    setTimeout("checkForChanges()", 500);
    if((userKeyword != keyword) && (autocompletedKeyword != keyword) && (!isKeyUpDownPressed))
    getSuggestions(keyword);
    }
    function handleKeyUp(e)
    {
    e = (!e) ? window.event : e;
    target = (!e.target) ? e.srcElement : e.target;
    if (target.nodeType == 3)
    target = target.parentNode;
    code = (e.charCode) ? e.charCode : ((e.keyCode) ? e.keyCode : ((e.which) ? e.which : 0));
    if (e.type == "keyup")
    {
    isKeyUpDownPressed = false;
    if ((code < 13 && code != 8) || (code >= 14 && code < 32) || (code >= 33 && code <= 46 && code != 38 && code != 40) || (code >= 112 && code <= 123))
    {
    }
    else
    if (code == 13)
    {
    if (position >= 0)
    {
    location.href = document.getElementById("a" + position).href;
    }
    }
    else
    if (code == 40)
    {
    newTR=document.getElementById("tr" + (++position));
    oldTR=document.getElementById("tr" + (--position));
    if (position >= 0 && position < suggestions-1)
    oldTR.className = "";
    if (position < suggestions - 1)
    {
    newTR.className = "highlightrow";
    updateKeywordValue(newTR);
    position++;
    }
    e.cancelBubble = true;
    e.returnValue = false;
    isKeyUpDownPressed = true;
    if (position > maxVisiblePosition)
    {
    oScroll = document.getElementById("scroll");
    oScroll.scrollTop += 18;
    maxVisiblePosition += 1;
    minVisiblePosition += 1;
    }
    }
    else
    if (code == 38)
    {
    newTR=document.getElementById("tr" + (--position));
    oldTR=document.getElementById("tr" + (++position));
    if (position >= 0 && position <= suggestions - 1)
    {
    oldTR.className = "";
    }
    if (position > 0)
    {
    newTR.className = "highlightrow";
    updateKeywordValue(newTR);
    position--;
    if (position < minVisiblePosition)
    {
    oScroll = document.getElementById("scroll");
    oScroll.scrollTop -= 18;
    maxVisiblePosition -= 1;
    minVisiblePosition -= 1;
    }
    }
    else
    if (position == 0)
    position--;
    e.cancelBubble = true;
    e.returnValue = false;
    isKeyUpDownPressed = true;
    }
    }
    }
    function updateKeywordValue(oTr)
    {
    var oKeyword = document.getElementById("keyword");
    var crtLink = document.getElementById("a" + oTr.id.substring(2,oTr.id.length)).toString();
    crtLink = crtLink.replace("-", "_");
    crtLink = crtLink.substring(0, crtLink.length - 4);
    oKeyword.value = unescape(crtLink.substring(phpHelpUrl.length.crtLi nk.length));
    }
    function deselectAll()
    {
    for (i=0; i < suggestions; i++)
    {
    var oCrtTr = document.getElementById("tr" + i);
    oCrtTr.className = "";
    }
    }
    function handleOnMouseOver(oTr)
    {
    deselctAll();
    oTr.className = "highlightrow";
    position = oTr.id.substring(2, oTr.id.length);
    }
    function handleOnMouseOut(oTr)
    {
    oTr.className = "";
    position = -1;
    }
    function encode(uri)
    {
    if (encodeURIComponent)
    {
    return encodeURIComponent(uri);
    }
    if (escape)
    {
    return escape(uri);
    }
    }
    function hideSuggestions()
    {
    var oScroll = document.getElementById("scroll");
    oScroll.style.visibility = "hidden";
    }
    function selectRange(oText, start, length)
    {
    if (oText.createTextRange)
    {
    var oRange = oText.createTextRange();
    oRange.moveStart("character", start);
    oRange.moveEnd("character", length - oText.value.length);
    oRange.select();
    }
    else
    if (oText.setSelectionRange)
    {
    oText.setSelectionRange(start, length);
    }
    oText.focus();
    }
    function autocompleteKeyword()
    {
    var oKeyword = document.getElementById("keyword");
    position = 0;
    deselectAll();
    document.getElementById("trO").className="highligh trow";
    updateKeywordValue(document.getElementById("trO")) ;

    selectRange(oKeyword.httpRequestKeyword.length.oKe yword.value.length);
    autocompletedKeyword=oKeyword.value;
    }
    function displayError(message)
    {
    alert("Errore durante l'accesso al server! " + (debugMode ? "\n" + message : ""));
    }



  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    417
    nessuno sà indicarmi dove è sbagliato?
    grazie

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2002
    Messaggi
    417
    riprendo il discorso, in pratica vorrei fare con php quello che ho visto sul link che allego per quanto riguarda la scelta della città (con un suggest simile) ma non riesco a capire da che parte cominciare. qualcuno ha da indicarmi dove scaricare dei demo? ed istruzioni?
    Grazie a tutti coloro che mi daranno spiegazioni in merito
    Luigi

  6. #6
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Impossibile dare spiegazioni in merito il sito fa uso di uno dei tanti autocomplete di jquery http://www.google.com/search?q=jquer...ient=firefox-a
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.