Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Inviare text xml con jquery ajax

    ciao!

    devo interrogare una api (a mio parere scritta coi piedi), alla quale devo inviare i dati con questa struttura:
    codice:
    WsXml=yes&WsXmlData=<WsXmlData>
        <caller>
            <name>NOME_API</name>
            <key>KEY</key>
        </caller>
        <login>
            <username>USER</username>
            <password>PWD</password>
        </login>
        <operation>
            <object>ReRe</object>
            <event>Search</event>
        </operation>
        <language>it</language>
        <params>
            <param>
                <name>latitude</name>
                <value>41.9428</value>
            </param>
            <param>
                <name>longitude</name>
                <value>12.6282</value>
            </param>
        </params>
    </WsXmlData>
    questi dati li ho inviati usando postman, e li ho inseriti nel body.
    ho provato usando jquery ajax, ma ottengo sempre errore.
    questo il codice:
    codice:
    <script>
        $(function () {
            var settings = {
                "async": true,
                "crossDomain": true,
                "url": "http://indirizzo.test.com/XAllegroFrimm.cgi",
                "method": "POST",
                "headers": {
                    "Content-Type": "text/xml",
                    "cache-control": "no-cache",
                    "Postman-Token": "3a9c73c7-15e4-4b34-af1b-8bdf58704a27"
    },
                "data": "WsXml=yes&WsXmlData=<WsXmlData><caller><name>NOME_API</name><key>PWD</key></caller><login><username>USER</username><password>PWD</password></login><operation><object>ReRe</object><event>Search</event></operation><language>it</language><params><param><name>latitude</name><value>41.9428</value></param><param><name>longitude</name><value>12.6282</value></param></params></WsXmlData>"
    }
    
            $.ajax(settings).done(function (response) {
                console.log(response);
            }).fail(function (err) {
                console.log(err);
            });
        });
    </script>
    questo l'errore:
    codice:
    Bloccata richiesta multiorigine (cross-origin): il criterio di corrispondenza dell’origine non consente la lettura della risorsa remota da http://indirizzo.test.com/XAllegroFrimm.cgi. Motivo: header CORS “Access-Control-Allow-Origin” mancante.
    
     
    
    Bloccata richiesta multiorigine (cross-origin): il criterio di corrispondenza dell’origine non consente la lettura della risorsa remota da http://indirizzo.test.com/XAllegroFrimm.cgi. Motivo: richiesta CORS non riuscita.
    qualche idea??

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    Ciao, quel messaggio in console non segnala un errore ma indica solo che la richiesta (AJAX) è stata bloccata perché effettuata da un'origine differente da quella in cui risiede la risorsa a cui vuoi accedere; si tratta appunto di una richiesta cross-origin, che è differente dal cross-domain.

    In poche parole, presumo tu stia effettuando la chiamata AJAX da una tua pagina in locale verso una pagina online, cosa che viene bloccata dal browser per motivi di sicurezza.

    Normalmente deve essere abilitato il supporto CORS sul web server per permettere richieste del genere.

    In alternativa è possibile tuttavia "forzare" il proprio browser per bypassare questa restrizione di sicurezza.
    Se usi Firefox c'è un'estensione che fa al caso https://addons.mozilla.org/it/firefo...rs-everywhere/

    Vedi se risolvi così.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    ciao!

    avevo provato dal mio server locale.
    adesso l'ho messo su un server condiviso, con queste impostazioni:
    codice:
                $(function () {
                    var settings = {
                        "async": true,
                        "crossDomain": true,
                        "url": "https://indirizzo.test.com/XAllegroFrimm.cgi",
                        "method": "POST",
                        "dataType": "xml",
                        "headers": {
                            "Content-Type": "text/xml",
                            "Access-Control-Allow-Origin": "*"
                        },
                        "data": "......................."
                    }
    
                    $.ajax(settings).done(function (response) {
                        console.log(response);
                    }).fail(function (err) {
                        console.log(err);
                    });
                });
    stesso errore!
    come posso fare???
    perchè cmq anche a sito finito dovrò interrogare queste API da un hosting che non è lo stesso della API!
    Ultima modifica di fermat; 01-04-2019 a 16:34

  4. #4
    aggiungo anche due cose:
    • provato con PHP e curl e non ho avuto problemi
    • adesso che ho spostato tutto su server di hosting ricevo anche un warning su contenuto misto bloccato (però ho puntato su HTTPS adesso, e non più su HTTP come prima)

  5. #5
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    forse è solo un problema legato a postman.
    Personalmente non so dirti di più.

    Fai magari qualche ricerca del tipo "postman cors".
    Vedi ad esempio qui, qualcuno ha proposto delle soluzioni:
    https://stackoverflow.com/questions/...a-post-request
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  6. #6
    no aspetta, forse mi sono spiegato male.

    postman funziona.
    php_curl funziona.
    è con jquery che non funziona e mi da quell'errore.
    ecco perchè ho scritto qui.
    volevo capire se stavo impostando qualcosa di sbagliato in jquery!

  7. #7
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    Non so, la butto lì, se i dati hanno la struttura che hai indicato nel primo post, mi viene da pensare che puoi spedirli col metodo GET anziché POST; chiaramente questo dipende da come li riceve la pagina server. Ad ogni modo ci siano delle differenze a livello di sicurezza tra l'uso dei due metodi, per cui col GET è possibile che magari funzioni.

    Prova a fare una roba del genere:
    codice:
    $.get(
       "http://indirizzo.test.com/XAllegroFrimm.cgi"
      ,"WsXml=yes&WsXmlData=<WsXmlData><caller><name>NOME_API</name><key>PWD</key></caller><login><username>USER</username><password>PWD</password></login><operation><object>ReRe</object><event>Search</event></operation><language>it</language><params><param><name>latitude</name><value>41.9428</value></param><param><name>longitude</name><value>12.6282</value></param></params></WsXmlData>"
      ,function(response){
       console.log(response);
    }).fail(function(err) {
       console.log(err);
    });
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  8. #8
    nada de nada.

    mi da cmq sempre errore CORS.
    lo trovo strano perchè solo con jquery/javascript.

    al limite da jquery interrogo il mio script php che manda la richiesta.
    faccia un passaggio in più, ma forse così riesco.

  9. #9
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,690
    nada de nada.

    mi da cmq sempre errore CORS.
    Te lo da provando sempre da locale o anche online?

    lo trovo strano perchè solo con jquery/javascript.
    Non è strano, anzi è l'attuale standard ed è giusto che sia così. Si tratta di restrizioni di sicurezza dei browser. Proprio perché si tratta di richieste cross-domain/cross-origin effettuate via script, quindi potenzialmente a insaputa dell'utente, il browser le blocca a meno che non ci siano i necessari permessi per effettuarle. Questi permessi devono essere rilasciati dalla pagina a cui punta la richiesta.

    Per ragioni di sicurezza, i browser limitano le cross-origin HTTP requests che vengono generate all'interno degli scripts. Ad esempio, XMLHttpRequest e la Fetch API seguono la same-origin policy. Ciò significa che un'applicazione web che utilizza queste API può solamente richiedere risorse HTTP dalla stessa origine di caricamento dell'applicazione, a meno che la risposta dall'altra origine includa i corretti header CORS.
    Fonte: https://developer.mozilla.org/it/docs/Web/HTTP/CORS

    Ora, se la pagina in questione non rilascia i permessi, la richiesta AJAX sarà negata. In tal caso andrebbe impostata opportunamente la pagina.

    Qui (una guida tra tante) viene spiegato il procedimento per impostare richieste di questo genere: https://hackerstribe.com/2013/fare-r...mlhttprequest/

    Mi pare però di capire che tu non sia amministratore di tale pagina; in tal caso non saprei proprio cosa puoi fare.

    al limite da jquery interrogo il mio script php che manda la richiesta.
    faccia un passaggio in più, ma forse così riesco.
    più che provare...
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  10. #10
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,131
    Quote Originariamente inviata da fermat Visualizza il messaggio
    ... al limite da jquery interrogo il mio script php che manda la richiesta.
    faccia un passaggio in più, ma forse così riesco.
    io i cross-domini li faccio sempre così mai avuto problemi
    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 © 2024 vBulletin Solutions, Inc. All rights reserved.