2011-12-06 6 views
2

私はファクトAPIを使いこなしていますが、取得リクエストとしてURLを表現する方法を完全に理解していません。jQuery:このURLをGETリクエストに変換する方法

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]}} 

これは私がこれを行うために書かれているコードです::以下は、私が手にjQueryに変身したいURLです私は放火犯で見ると

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" 
     ); 
    }); 

これが何であるかのアドレス私の要求は次のようになりました:

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 

...明らかに間違っています!

そして、ここでは事実上の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"} 

誰かが私は私のコードで正しく行っていないものを私に伝えることができますか?取得リクエストの一部として渡しているデータをエンコードするつもりですか?それとも、私が逃したものですか?

+0

'$の.PARAM()'を通して、あなたのデータを送信してみてください。 '$ .param({APIKey:factualKey、filt ...})' – RightSaidFred

+0

...私がそれをすると、あなたは同じエラーを受け取ってしまいます。 – RightSaidFred

+0

私はあなたのフィルタを回す必要があると思う:JSONの文字列にして、それをurlencode。今すぐjQueryがブラケットを使ってオブジェクトを保存しようとしているかのように見える - > filter [category] ​​[$ bw] = etc ...あなたが本当に望むのは - &filters = {url encoded json data heijacked jQuery paramterizatoin(sp?)} – Aknosis

答えて

2

は、ここで私はあなたのオブジェクトを使用して成功したクエリ文字列を得た方法です。同じ

$.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] } 
      }) 
}); 

あなたはフィルタそのI JSON.stringify除いて、やって、そして$.param全体の事しているものとして。

$.paramが必要かどうか不明です。 jQueryがそれを行うかもしれません。

同じオリジンポリシーの問題が発生するかどうかもわかりません。

+0

ありがとう、それは治療を働いた! –

0

あなたは仕事のためのjQueryのための適切な機能を使用する必要があります。サーバーに送信され

$.getJSON()

データは、クエリ 文字列としてURLに付加されます。データパラメータの値がオブジェクト(マップ)の場合、 は文字列に変換され、URLが URLに追加される前にURLエンコードされます。あなたのJSONデータが台無しになっていると

...

+0

でも$ .getもURLをエンコードしますか?それは私が逃しているもののように見えるので... –

0
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); 
      } 
    ); 
}); 
関連する問題