2012-02-13 18 views
10

sto facendo questa semplice richiesta GET utilizzando jQuery Ajax:ajax jquery semplice richiesta get

 $.ajax({ 
      url: "https://app.asana.com/-/api/0.1/workspaces/", 
      type: 'GET', 
      success: function(res) { 
       console.log(res); 
       alert(res); 
      } 
     }); 

Si tratta di restituire una stringa vuota come un risultato. Se vado a questo link nel mio browser, ottengo:

{"status":401,"error":"Not Authorized"} 

quale è il risultato previsto. Quindi, perché non funziona usando l'ajax? grazie!

+1

Hai provato aggiungendo dataType: "jsonp" in là –

+0

@KaiQing, che isn il problema è qui. Altrimenti, il gestore del successo non verrebbe chiamato. Inoltre, la risposta di esempio non è una risposta JSONP. – Brad

+0

@PragmaOnce, controlla le intestazioni con un pacchetto diverso, ad esempio Wireshark. Sospetto che troverai alcune differenze tra ciò che viene inviato dal browser e con la chiamata AJAX. – Brad

risposta

6

Mi sembra, questo è un problema di dominio croce, dal momento che non ti è permesso di fare richiesta di un dominio diverso.

Dovete soluzioni per questo problema: - Utilizzare uno script proxy, in esecuzione sul server che foward tua richiesta e gestirà la risposta di inviarlo al browser O - Il servizio si sta facendo richiesta deve avere supporto JSONP. Questa è una tecnica cross domain. Si potrebbe leggere questo http://en.wikipedia.org/wiki/JSONP

1

È possibile effettuare richieste AJAX alle applicazioni caricate dal dominio SAME e dalla porta SAME.

Oltre a questo, è necessario aggiungere dataType JSON se si desidera che il risultato venga deserializzato automaticamente.

$.ajax({ 
     url: "https://app.asana.com/-/api/0.1/workspaces/", 
     type: 'GET', 
     dataType: 'json', // added data type 
     success: function(res) { 
      console.log(res); 
      alert(res); 
     } 
    }); 

http://api.jquery.com/jQuery.ajax/

1

Penso che il problema è che non ci sono dati nella funzione di successo perché la richiesta si rompe con un errore 401 nel tuo caso e quindi non ha successo.

se si utilizza

$.ajax({ 
     url: "https://app.asana.com/-/api/0.1/workspaces/", 
     type: 'GET', 
     error: function (xhr, ajaxOptions, thrownError) { 
    alert(xhr.status); 
    alert(thrownError); 
    } 
    }); 

ci sarà il vostro 401 codice penso (this link dice così)

2
var dataString = "flag=fetchmediaaudio&id="+id; 

$.ajax 
({ 
    type: "POST", 
    url: "ajax.php", 
    data: dataString, 
    success: function(html) 
    { 
    alert(html); 
    } 
});