2012-11-25 17 views
7

Sto facendo qualcosa di jQuery ajax piuttosto semplice sul mio sito web, e sto avendo un carico di guai.jQuery ajax non farà richieste HTTPS

Ecco il codice rilevante:

$(document).ready(function() { 
    $("#getdatabutton").click(function() { 
     $.ajax({ 
      url: "/jsontest/randomdata", 
      type: "get", 
      data: [{name:"ymax", value:$("#randomgraph").height()}, 
        {name:"count", value:$("#countinput").val()}, 
        {name:"t", value:Math.random()}],  
      success: function(response, textStatus, jqXHR) { 
       data = JSON.parse(response); 
       updateGraph(data); 
       $("#result").html(response); 

       if(data["error"] == "") { 
        $("#errorbox").html("None"); 
       } 
       else { 
        $("#errorbox").html(data["error"]); 
       } 
      }, 
      error: function(jqXHR, textStatus, errorThrown) { 
       $("#errorbox").html(textStatus + " " + errorThrown); 
      } 
     }); 
    }); 
}); 

La pagina viene caricata tramite HTTPS, ma i XMLHttpRequests sembrano uscire su HTTP.

Ho tentato anche di modificare l'url nell'URL assoluto (https://larsendt.com/jsontest/randomdata) e lo ancora invia la richiesta alla versione HTTP del mio sito.

Naturalmente, poiché la richiesta sta per un protocollo diverso, la chiamata ajax fallisce (dominio incrociato e tutto il resto).

Come riportato da Chrome:

The page at https://larsendt.com/jsontest/ displayed insecure content from http://larsendt.com/jsontest/randomdata/?ymax=500&count=32&t=0.08111811126582325. 

L'unica altra informazione pertinente che posso pensare è che io sto avendo nginx fanno un reindirizzamento 301 http://larsendt.com-https://larsendt.com, ma non vedo come sarebbe rompere qualsiasi cosa (credo che sia una pratica abbastanza standard).

Se si desidera una demo dal vivo, la versione guasto è ancora attiva su https://larsendt.com/jsontest.

In ogni caso, grazie in anticipo.

+0

Ti spiace cambiare il titolo del tuo post in modo che le persone con questa query non atterrino in questa pagina .. – brayne

risposta

13

Prova fissare l'URL in modo che il server non dispone di reindirizzare

url: "/jsontest/randomdata/" // there was a missing trailing/

// i.e. https://larsendt.com/jsontest/randomdata?ymax=500&count=32&t=0.9604179110508643 
// was going to https://larsendt.com/jsontest/randomdata/?ymax=500&count=32&t=0.9604179110508643 
+0

Ah! Questo è stato. Grazie mille! –

+0

Buon punto, Nood. Questo può probabilmente anche essere risolto nel server. IIRC, in Apache (e forse altri) ci sono diversi approcci per gestire una barra finale mancante. Non sono un esperto, ma ci ho letto una volta (circa 10 anni fa!). –

+0

Questo è risolto il mio problema. Ottimo punto. –

1

301 Permanent Redirect può accadere. Per controllare eseguire Fiddler e guardare la colonna Risultato. Solitamente 200 codici, ma ho individuato un codice 301.

Il https jquery ajax chiamata è stata riorientando a http, che causa l'errore contenuto misto.