2

URLのパラメータは何をし&callbackますか?私が尋ねている理由は、jqueryの$ .ajax関数を使用してクエリを実行していて&callback=?、URLの最後に含めると400(不正な要求)エラーが発生するためです。

これが私のjavascriptコードです:

var energy_query_array = [];


var masterEnergyTable_tableid = '145TOXaanydD63tvgVMmCVH0hei0NXNCEK8ekZBg';
var current_date = 'Jan-12';

var energy_query = 'SELECT * FROM ' + masterEnergyTable_tableid; 

var encoded_energy_query = encodeURIComponent(energy_query);
var energy_url = ['https://www.googleapis.com/fusiontables/v1/query'];
energy_url.push('?sql=' + encoded_energy_query);
energy_url.push('&key=' + apiKey); 
//energy_url.push('&callback=?');
$.ajax({
url: energy_url.join(''),
datatype: 'jsonp',
success: function(data) {
           var name_array = data['columns'];
           var data_array = data['rows'][0];
       for(var i = 1; i < data['columns'].length; i++) {
        energy_query_array[name_array[i]] = data_array[i];
       }
     }
});

console.log(energy_query_array);

&callback=?クエリに残すとエラーが返されるため、URL に追加する行をコメントアウトしました。"message":"Invalid value for parameter callback: ?"

ただし、コードの前半で、コールバックに同じパラメーターを使用して、Googleフュージョンテーブルと同様のクエリを実行しました。

コードの最後にあるconsole.log呼び出しは、コンソールに空の配列を表示します。

4

3 に答える 3

2

コールバックは JSONP リクエストに使用されますが、これは、JSON データをフェッチするためにクロス ドメイン リクエストを実行するときに使用することを意図していません。XHR ラッパーを使用する代わりに、スクリプト タグを使用します。このタグは、内部のすべての JSON データを渡すために使用される関数を指すコールバック クエリ文字列パラメーターを渡します。このようにして、アプリケーションがどのように機能するかを知らないデータポイントを持つことができますが、コールバックを渡すと、データで関数が起動されます。これにより、任意のブラウザから API を使用できます。

于 2012-12-06T14:25:21.030 に答える
1

クエリ文字列 (またはホスト名とフラグメント ID の間の他の場所) 内の他のデータと同様に、サーバーにデータを提供します。意味は、そのサーバーで実行されているソフトウェアによって完全に決定されます。

RESTful API の JSON-P 応答で呼び出す関数の名前として使用される値のキーとして使用する規則があります。JSON-Pは、CORS をサポートしていないブラウザーのオリジン間でアクセス可能な Web サービスを提供する手段です。callback

例えば

http://example.com/foo?callback=asdf

あなたに与えるだろう

asdf([1,2,3]);

JSON-P では、明らかに、サーバーが JSON-P 応答の送信をサポートしている必要があります。jQuery を使用してクロスオリジン リクエストを実行しようとすると、サーバーが通常の規則で JSON-P をサポートすることを前提として、(デフォルトで) リクエストが変更されます。

于 2012-12-06T14:26:44.870 に答える
0

クエリ文字列について読む

それらは で始まり?、追加のパラメータは で連結され&ます。は?、エンコードされていない限り、文字列の先頭以外の場所にあってはなりません。

これが標準の GET 要求の実行方法であるため、キーと値のペアがサーバーで使用可能になります。

例えば:

http://myserver.com?name=josh&age=24&state=il

Web サーバーがクエリ文字列のどこかで窒息している可能性があります。

于 2012-12-06T14:24:47.807 に答える