2013-10-14 15 views
6

Sono novizio in javascript, angularJS e JQuery, ma ho appena iniziato la programmazione di un app angularJS in cui io uso JQuery per ottenere un JSON da un server web come questo:Esiste un metodo in angularJS che è uguale a getJSON. [Avviso Newbie]

var obj = $.getJSON("http://something.com/lol?query="+ $scope.searchString, function() { 
      $scope.items = obj.responseJSON.entries;      
     } 

Esiste un metodo uguale a $ .getJSON in angularJS? In modo che non debba importare la libreria JQuery.

Grazie in anticipo, novizio.

Questa è la mia soluzione finora:

function InstantSearchController($scope, $http){ 
$scope.search = function() { 
    $http.jsonp("http://something.com/lol?query="+ $scope.searchString + "?json_callback=JSON_CALLBACK").success(
         function(data, status) { 
          console.log(data); 
         } 
       ); 
} 

ma sto ricevendo il msg di errore:

Uncaught SyntaxError: Unexpected token :

perché è questo? Che cosa sto facendo di sbagliato? }

risposta

8

A causa del l'aiuto che ho ricevuto da parte di persone rispondere alla mia domanda sono finalmente riuscito a risolvere il problema, e l'ho fatto in questo modo:

app.controller('myController', function($scope, $http){ 
    $scope.items = []; 
    $scope.search = function() {   
      $http({method: 'JSONP', url: "http://something.com/lol?callback=JSON_CALLBACK&query="+ $scope.searchString}). 
       success(function(data, status) { 
       $scope.items = data.entries; 
       }). 
       error(function(data, status) { 
       console.log(data || "Request failed"); 
      });  
    }; 

Spero che questo aiuti chiunque abbia lo stesso problema in futuro: D

2

È possibile utilizzare $http per inviare richieste AJAX in Angolare.

1
function ListProdcutsCtrl($scope, $http) { 
    var request = {'searchString' : 'apple'}; 
    $http.get('/api/products', request).success(function(response) { 
     $scope.products_table_data = response.products; 
    }); 
+1

var request = {'searchString' = 'apple'}; ?dovrebbe essere var request = {'searchString': 'apple'}; – Whisher

+0

Sì, mi dispiace. In realtà non ho eseguito il codice ... –

+0

Non lo capisco, a causa della diversa configurazione aaa e che io sono un noooob completo ... È possibile darmi una soluzione con gli stessi nomi che ho usato nel mio esempio? xD – Erex

1

C'è un'alternativa in AngularJS chiamati $http, è possibile trovare more here. Per esempio:

$http({method: 'JSONP', url: 'http://domain.com/page?json_callback=JSON_CALLBACK'}).success(
    function(data, status) { 
     // your stuff. 
    } 
); 

O ancora più breve:

$http.jsonp('http://domain.com/page?json_callback=JSON_CALLBACK').success(
    function(data, status) { 
     // your stuff. 
    } 
); 

JSONP (JSON imbottitura) consente di ottenere dati JSON da un altro dominio. Tuttavia, i dati che si ottiene non dovrebbe essere JSON semplice, ma piuttosto un file JavaScript come questo:

JSON_CALLBACK([ 
    {"name": "apple", "color": "red"}, 
    {"name": "banana", "color": "yellow"} 
]); 

Se i dati JSON è necessario proviene dallo stesso dominio, non hai bisogno di JSONP.

+0

Grazie! Ma questo è un JSONP e non JSON? Qual è la differenza? Ricevo un errore "Uncaught SyntaxError: Unexpected token:" quando sto facendo questo, probabilmente perché? – Erex

+0

JSONP consente a vari browser di richiedere dati JSON da un altro dominio, cosa solitamente vietata dai browser. Anche se nel mio URL di esempio non è esplicito, devi aggiungere il parametro "callback = JSON_CALLBACK" al tuo URL (maggiori informazioni in AngularJS doc). –

+0

Ho provato ad incollare il mio codice qui, ma non è riuscito a farlo funzionare, quindi ho esteso la mia domanda. Qualche idea che cosa è sbagliato? sentire come un noob huuuuge ora, è stato per il nostro! – Erex

0

JSONP viene utilizzato per superare la restrizione interdominio delle chiamate URL AJAX.

Con AngularJS (v1.5), è possibile utilizzare questo codice per inviare le richieste di domini incrociati:

$http.jsonp(baseurl+'?token=assume_jwt_token'+encoding+type + "&callback=JSON_CALLBACK") 

La sintassi per la richiesta AngularJS JSONP è:

$http.jsonp(url, [config]); 

dove url è "string "tipo che rappresenta l'URL relativo o assoluto che specifica la destinazione della richiesta. Il nome del callback deve essere la stringa JSON_CALLBACK e [config] è l'oggetto di configurazione opzionale.