jQuery: hoe u van deze URL een GET-aanvraag maakt

Ik ben gewoon aan het rommelen met de Feitelijke API, maar ik begrijp niet helemaal hoe ik een URL moet weergeven als een get-verzoek. Het volgende is de URL die ik wil veranderen in een jQuery-opdracht:

http://api.factual.com/v2/tables/7HOTBC/read?APIKey=SoX1rlj4x8VfRfvqnnehVH5ObpkHJc0kIzloTtxor5gyrHG5c3EySCTTcErCyRYO&filters={"category":{"$bw":"Arts%2C%20Entertainment%20%26%20Nightlife%20%3E%20Bars"},"latitude":{"$blank":false},"longitude":{"$blank":false},"$search":["London"],"$loc":{"$within_dist":[51.5149943,-0.0638818,1000]}}

Dit is de code die ik heb geschreven om dit te doen:

    var factualKey = "SoX1rlj4x8VfRfvqnnehVH5ObpkHJc0kIzloTtxor5gyrHG5c3EySCTTcErCyRYO";

    $(document).ready(function(){

       //initialise Google maps
        initializeGoogleMaps();

       //make a get request to the factual api
        $.get(
                "http://api.factual.com/v2/tables/7HOTBC/read",
                { APIKey : factualKey,
                  filters : { category : { $bw : "Arts, Entertainment & Nightlife > Bars" },
                              latitude : { $blank : false },
                              longitude : { $blank : false },
                              $search : "[\"London\"]",
                              $loc : { $within_dist : [51.5149943,-0.0638818,1000] }
                  }
                },
                function(responseData){
                    alert("SUCCESS");
                },
                "json"
        );
    });

Als ik in firebug kijk, is dit het adres van mijn verzoek, zoals:

http://api.factual.com/v2/tables/7HOTBC/read?APIKey=SoX1rlj4x8VfRfvqnnehVH5ObpkHJc0kIzloTtxor5gyrHG5c3EySCTTcErCyRYO&filters[category][%24bw]=Arts%2C+Entertainment+%26+Nightlife+%3E+Bars&filters[latitude][%24blank]=false&filters[longitude][%24blank]=false&filters[%24search]=[%22London%22]&filters[%24loc][%24within_dist][]=51.5149943&filters[%24loc][%24within_dist][]=-0.0638818&filters[%24loc][%24within_dist][]=1000

... wat duidelijk verkeerd is!

En hier is het antwoord van de feitelijke API:

{"version":"2","status":"error","error":"Your filters parameter cannot be parsed. Please see http:\/\/wiki.developer.factual.com\/Server-API for documentation.","error_type":"Api::Error::InvalidArgument"}

Kan iemand me vertellen wat ik niet goed heb gedaan in mijn code? Moet ik de gegevens coderen die ik passeer als onderdeel van het verzoek tot ophalen? Of heb ik het gemist?

2
Ik denk dat je je filters moet veranderen: in een JSON string en dat dan urlencode. Op dit moment lijkt het erop dat jQuery probeert om het object te behouden met behulp van de haakjes -> filter [categorie] [$ bw] = enz ... En wat je echt wilt is -> & filters = {url gecodeerd json data no gekaapte door jQuery paramterizatoin (sp?)}
toegevoegd de auteur Aknosis, de bron
Probeer uw gegevens te verzenden via $. Param() . $. param ({APIKey: factualKey, filt ...})
toegevoegd de auteur RightSaidFred, de bron
... nevermind, krijg ik dezelfde fout die je krijgt als ik dat doe.
toegevoegd de auteur RightSaidFred, de bron

3 antwoord

Hier is hoe ik een succesvolle querystring kreeg met behulp van je object.

$.param({ APIKey : factualKey,
          filters : JSON.stringify({ category : { $bw : "Arts, Entertainment & Nightlife > Bars" },
                      latitude : { $blank : false },
                      longitude : { $blank : false },
                      $search : "[\"London\"]",
                      $loc : { $within_dist : [51.5149943,-0.0638818,1000] }
          })
});

Hetzelfde als wat je doet, behalve dat ik < JSON.stringify de filters, en $. Param het hele ding.

Niet zeker of de $. Param nodig is. Zou kunnen zijn dat jQuery het doet.

Weet ook niet zeker of u dezelfde problemen met het oorspronkelijke beleid treft.

2
toegevoegd
Bedankt, dat werkte een traktatie!
toegevoegd de auteur james lewis, de bron
var factualKey = "SoX1rlj4x8VfRfvqnnehVH5ObpkHJc0kIzloTtxor5gyrHG5c3EySCTTcErCyRYO";

$(document).ready(function(){

   //initialise Google maps
    initializeGoogleMaps();

   //make a get request to the factual api
    $.getJSON(
            "http://api.factual.com/v2/tables/7HOTBC/read",
            { APIKey : factualKey,
              filters : JSON.stringify({ category : { $bw : "Arts, Entertainment & Nightlife > Bars" },
                          latitude : { $blank : false },
                          longitude : { $blank : false },
                          $search : "[\"London\"]",
                          $loc : { $within_dist : [51.5149943,-0.0638818,1000] }
              })
            },
            function(data){
                console.log(data);
            }
    );
});
0
toegevoegd

Gebruik de juiste functie voor jQuery voor de taak:

$ .getJSON()

     

Gegevens die naar de server worden verzonden, worden als een zoekopdracht aan de URL toegevoegd   draad. Als de waarde van de gegevensparameter een object (kaart) is, is dit   geconverteerd naar een tekenreeks en gecodeerd met url voordat deze wordt toegevoegd aan de   URL.

Terwijl uw JSON-gegevens worden verminkt ...

0
toegevoegd
dat geldt ook voor $ .get url-coderen voor de string? omdat het lijkt alsof dat is wat ik mis ...
toegevoegd de auteur james lewis, de bron