Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Richieste asincrone con xmlHttpRequest

    Ciao ragazzi,

    devo inviare più di una richiesta contemporaneamente ad un webservice. Con xmlhttprequest dopo la prima richiesta l'esecuzione "sembra" essere asincrona ma la response è vuota se eseguo una seconda richiesta contemporanea.

    Il problema può essere causato dal fatto che utilizzo la libreria nusoap.php per le richieste al web server (mi serve per il cross-domain dato che interrogo il web service di Google...)

    Grazie a tutti!
    Etha

  2. #2
    Moderatore di JavaScript L'avatar di br1
    Registrato dal
    Jul 1999
    Messaggi
    19,998
    Ma la richiesta la fai dal browser o dal server? :master:

    ciao
    Il guaio per i poveri computers e' che sono gli uomini a comandarli.

    Attenzione ai titoli delle discussioni: (ri)leggete il regolamento
    Consultate la discussione in rilievo: script / discussioni utili
    Usate la funzione di Ricerca del Forum

  3. #3
    Ti spiego:

    Se la facessi direttamente dal browser verrebbe bloccata perchè il mio script richiede l'accesso al web service di google che non si trova sul mio stesso dominio...
    in realtà, dal browser apro la xmlhttprequest che richiede ad un mio script php di effettuare la richiesta vera e propria al webservice di google...praticamente uso un proxy per il cross domain...motivo per cui mi servo di nusoap.php...
    Etha

  4. #4
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    1) Cosa succede se invece le tue richieste fossero sincrone?? Si presenta lo stessa problema o no?
    2) stai facendo chiamate post o get?
    3) quale browser stai usando

    l'unica cosa che possiamo fare qui è vedere il codice javascript, magari la seconda chiamata sovrascrive in qualche modo la prima perhè non istanzi l'oggetto xmlhttp... correttamente
    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  5. #5
    1) idem se le chiamate sono sincrone o meno...
    2) uso get
    3) Firefox ma instanzio l'oggetto xmlHttpRequest a seconda del browser

    Eccoti parte del codice (il "core"):

    ...premessa: par è un oggetto che ho creato io: contiene un array associativo con i parametri che mi servono, e il metodo encodeParams() mi trasforma l'array in un'unica stringa formattata per essere mandata in get (tutto provato e funzionante),in base ad altri parametri invio un certo numero di richieste, quindi :
    ...
    for (var j=10; j<=i; j+=10){
    par.changeParam("numResult",j);
    par.changeParam("idReq",(j/10));
    r = par.encodeParams();
    sendReq('doGoogleSearch',r,j);
    }
    ...

    ----> XMLHttpRequest, creazione ed invio richiesta <----

    function createRequestObject() {
    var ro;
    var browser = navigator.appName;
    if(browser == "Microsoft Internet Explorer"){
    ro = new ActiveXObject("Microsoft.XMLHTTP");
    }else{
    ro = new XMLHttpRequest();
    }
    return ro;
    }

    var http = createRequestObject();

    function sendReq(action,param,i) {

    alert("sending request "+(i/10));

    http.open('get','rpc.php?action='+action+param,tru e);
    http.onreadystatechange = handleResponse;
    http.send(null);
    }

    function handleResponse() {

    alert("http.readyState: "+http.readyState);

    if(http.readyState == 4){
    var response = http.responseText;
    document.getElementById("content").innerHTML += response;
    }
    }


    ----> rpc.php <----

    <?php
    include("search.util.php");

    if ($_REQUEST['action']=='doGoogleSearch'){

    $end = '@end@'.$_REQUEST['idReq'].'@end@';

    settype($_REQUEST['startFrom'],"integer");
    settype($_REQUEST['numResult'],"integer");
    settype($_REQUEST['filter'],"boolean");
    settype($_REQUEST['adultContent'],"boolean");
    $res = "";

    $params = array(
    'Googlekey' => 'DeQ3bddQFHIULlX6C7BBVBwtQ/yFUOVq', // Google license
    'queryStr' => $_REQUEST['queryStr'], // termine di ricerca digitato
    'startFrom' => $_REQUEST['numResult']-10, // indice di inizio risultati
    'maxResults' => 10, // 10 = numero massimo consentito
    'filter' => $_REQUEST['filter'], // rimuove risultati simili
    'restrict' => '', // restrict by topic
    'adultContent' => $_REQUEST['adultContent'], // filtro adult content
    'language' => $_REQUEST['language'], // restrict by language
    'iencoding' => 'utf8', // input encoding
    'oencoding' => 'utf8' ); // output encoding

    $MyResult = doSearch($params);
    $res = showSearchResult($MyResult);
    echo $end.$res;
    }
    ----> search.util.php <----

    <?php

    include ("nusoap.php");


    function doSearch($params)
    {
    $soapclient = new soapclient("http://api.google.com/search/beta2");
    $Result = $soapclient->call("doGoogleSearch", $params, "urn:GoogleSearch", "urn:GoogleSearch");
    return $Result;
    }

    function showSearchResult($Result)
    {
    ....istruzioni per la stampa dei risultati...
    (ometto il codice perchè è solo una serie di echo, che è poco interessante, ma funziona...)
    }

    ?>
    Etha

  6. #6
    Frontend samurai L'avatar di fcaldera
    Registrato dal
    Feb 2003
    Messaggi
    12,924
    dunque innanzitutto proverei a fare qualche piccola correzione al codice

    1) fare l'istanziazione dell'oggetto in modo più completo (manca un activex per versioni differenti di IE)

    2) proverei a controllare che lo status della risposta sia 200 (ok) o 304 (in cache)

    3) proverei a cambiare

    var http = createRequestObject();

    in

    var http = new createRequestObject();


    4) e se 1-3 proprio non risolvono proverei a cambiare get in post


    Spero possa servire ... è per la tua tesi se non sbaglio, vero?




    Vuoi aiutare la riforestazione responsabile?

    Iscriviti a Ecologi e inizia a rimuovere la tua impronta ecologica (30 alberi extra usando il referral)

  7. #7
    si serve per la mia tesi...

    Comunque...1 e 3 non sono rilevanti (anche perchè utilizzo solo Firefox e non funziona...)

    A che pro utilizzare il metodo post?! cosa cambia?
    Etha

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.