Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  9 3076
Forsøker å sette opp spørringer fra en odata-kilde (Northwind) - får error 400 når jeg forsøker å hente data. Samme filter fungerer når jeg går direkte til den via nettleseren. Er det noe annet jeg må spesifisere?

Kode

app.directive('search', function () {
return function ($scope, element) {
    element.bind("keyup", function (event) {
      let val = element.val();
      if(val.length > 2) {
        $scope.search(val);
      }
    });
};
});

app.controller('searchEmployees', function($scope, $http) {
    $scope.search = function(val) {
    console.log(val);
        $http.get(BASE_URL+"Employees?$filter=substringof("+val+", FirstName) eq true")
        .then(function(response) {
            $scope.rawData = response.data;
    })
}});


<div ng-controller="searchEmployees">
  <input type="text" search/>
</div>
Dersom jeg f. Eks. Søker etter 'Nan', siden det er en ansatt ved navn Nancy, fungerer det med direkte adresse, men ikke med min kode (http://services.odata.org/Northwind/Northwind.svc/Employees?$filter=substringof%28%27Nan%27,%20FirstName%29%20 eq%20true)
Sist endret av lroedal; 5. mai 2018 kl. 15:37.
Du bruker ' (%27) i eksempelet, men det ser ikke ut som du bruker det i koden din
Trådstarter
Får error 400 i begge tilfeller, dessverre. Uten '' er feilmeldingen i tillegg Possibly unhandled rejection: {"data":{"error":{"code":"","message":"Could not find a property named 'Nan' on type 'NorthwindModel.Employee'. Om jeg legger til '', blir feilmeldingen Possibly unhandled rejection: {"data":{"error":{"code":"","message":"An unknown function with name 'substringof' was found. This may also be a function import or a key lookup on a navigation property, which is not allowed." i tillegg til error 400. :/
Såvidt jeg kan se mangler du bare enkeltfnutter i koden din slik som @lor3ntz skrev.
$http.get(BASE_URL+"Employees?$filter=substringof('"+val+"', FirstName) eq true")

Ville også bedt om svar i json da det funker adskillig bedre med Angular (og generell sanity)
$http.get(BASE_URL+"Employees?$filter=substringof('"+val+"', FirstName) eq true&$format=json")
Sist endret av norboost; 6. mai 2018 kl. 11:29.
Trådstarter
Mener på at standard fra det datasettet om du ikke spesifiserer er JSON - men testet likevel nå. Samme feilmelding dessverre. :/ Siden det ikke er snakk om så mye data det kan søkes i i dette tilfellet, har jeg "løst det" ved å hente inn alle - deretter looper jeg og sjekker substring med Javascript, og pusher resultatene til et nytt array. Det er jo en særdeles lite elegant løsning, så hadde vært fint å få det til på riktig måte.
Har du sammenlignet urlen i network-fanen med den direkte-adressen du bruker? Om de ikke er helt like så ser du kanskje hva feilen er.
Trådstarter
Spørs om filteret i datasettet rett og slett ikke er støttet av $http.get? Ser de fleste andre eksempler jeg har funnet ved Googling bruker $resource - men virker litt stort ifht. det jeg forsøker å få til.
Bea
Big Bad Wolf
Bea's Avatar
Det funker jo når du går til URLen direkte i browseren, så det vil jo si at det funker med en vanlig GET request.
Har du prøvd å printe ut akkurat URLen koden din genrerer? Kan du sammenligen den med det som fungerer? Evnt poste her sånn at vi kan se hva forskjellen på de to er
400 betyr bad request. Det betyr at du sender en forespørsel som ikke er støttet.

Den første feilmeldingen, Could not find a property named 'Nan' on type 'NorthwindModel.Employee', får du fordi du ikke har fnutter rundt Nan - da tolker det Nan som navnet på en property på Employee-typen, som ikke finnes.

Den andre feilmeldingen sier at substringof ikke er en støttet funksjon.

Kode

var query = encodeURI('Employees?$filter=contains(FirstName, \'Nan\')');
$http.get(BASE_URL+query)
bør fungere
Sist endret av lor3ntz; 7. mai 2018 kl. 23:10.
Trådstarter
Tusen takk - det fungerte når jeg brukte encodeURI! Enda mer å lese seg opp på da.