2013-09-23 20 views
14

Sto imparando AngularJS e sto provando a creare un sistema front-end che ottenga i dati da Wordpress.jQuery richiesta ajax funziona, stessa richiesta Ajax di AngularJS non

Sul lato back-end tutto sembra essere impostato correttamente e quando uso la richiesta jQuery ajax ottiene i dati senza problemi.

jQuery.ajax({ 
    type: 'POST', 
    url: '/wp-admin/admin-ajax.php', 
    data: { 
     action: 'getdataajax' 
    }, 
    success: function(data, textStatus, XMLHttpRequest){ 
     console.log(data); 
    }, 
    error: function(MLHttpRequest, textStatus, errorThrown){ 
     console.log(errorThrown); 
    } 
}); 

Ma quando provo a fare la stessa cosa con AngularJS, non funziona. Sto cercando di replicare la richiesta AJAX con codice come questo:

myApp.factory('productsData', function($http, $log) { 
    return { 
     getProducts: function(successcb) { 
      return $http({ 
       method: 'POST', 
       url: '/wp-admin/admin-ajax.php', 
       data: {action: 'getdataajax'} 
      }).success(function(data, status, headers, config) { 
        successcb(data); 
        $log.info(data, status, headers(), config) 

      }).error(function(data, status, headers, config) { 
        $log.warn(data, status, headers(), config) 
      }); 
     }, 

    }; 
}); 

Se annoto che, emette 0. Che cosa mi manca?

Grazie per il vostro aiuto.

P.S. Controller è simile al seguente:

myApp.controller('ProductsController', function ProductsController($scope, productsData) { 

    $scope.sortorder = 'name'; 

    // $scope.products = productsData.products; 
    // $scope.products = productsData.getProducts(); 

    productsData.getProducts(function(products){ 
     $scope.products = products; 
    }); 
}); 
+0

Come si utilizza questo nel controller ? – tymeJV

+0

Aggiornato il post. Ho provato diversi modi. Commentato pure. Nessuno di loro funziona. Scusa – Pavel

+0

Aggiungilo alla domanda per favore, incollare il codice nei commenti è piuttosto brutto. – tymeJV

risposta

28

Nel codice angularjs, utilizzare params: invece di data:.

in jQuery l'oggetto in dotazione per l'impostazione data: config viene convertito in una stringa di query (? Key1 = val1 & chiave2 = valore2) a meno che non si imposta processData: false. in angularjs, è necessario utilizzare params: per ottenere una stringa di query, data: viene inviato come json o stringa.

+0

Ha risolto il problema. Molte grazie! – Pavel

+4

Si noti che questo diventa req.query sul lato server –

+2

Questo non ha funzionato per me finché non ho cambiato $ _POST a $ _REQUEST –