7

aのquery部分は、 でURL区切られ&、 で関連付けられたキーと値のペアで構成されているよう=です。

私は常に jQuery の$.param()関数を使用してクエリ文字列を URL エンコードするようにしています。これにより、コードがより読みやすく、保守しやすくなることがわかったからです。

ここ数日、私は MediaWiki API を呼び出していること$.param()に気付きましたが、ハードコードされた URL を使用して作業中のプロトタイプをクリーンアップしているときに、一部の MediaWiki API にはキー付きのクエリ パラメーターが含まれているが、値が含まれていないことに気付きました!

api.php ? action=query & titles=Main%20page & redirects

&redirects値を取らない部分に注意してください。

jQuery$.param()はオブジェクトを受け取ります。オブジェクトはキーと値のペアのみで構成されるため、1 つのメンバーがキーを持ち、値を持たないオブジェクトを渡すことはできません。

nullそれは問題ないので、またはundefinedまたはなどの値を渡すことができると思いまし0たが、これらはすべて同じように扱われているようです。これは驚くべきことであり、MediaWiki API ドキュメントには、この背後にある理由について何も見つけることができませんでした。

私の場合は、URL 文字列を手動で作成することで簡単に回避できます。私の質問は、「これは MediaWiki API の癖ですか?それとも URL エンコードの設計の癖ですか?関連付けられた値を持たない URL エンコードされたパラメーターの背後にある理由を理解するには、どこを読むべきですか?」

4

3 に答える 3

7

ほとんどの場合、彼らが行っていることは、パラメーターが定義されていることを確認しているだけです。クエリ文字列に追加redirectsすることで、事実上、「リダイレクト変数が true である」ということになります。したがって、追加redirects=0は依然としてその変数を定義しており、MediaWiki API はそれが定義されていることを認識しています (値が何であるかは気にしません)。

jQuery コードでは、単にそのパラメーターを追加する (値を指定するか、値を指定しない) か、定義したくない場合は省略する必要があります。

于 2012-06-18T17:47:00.593 に答える
0

Python や Ruby などで小さなテスト Web サーバーを作成し、 のようなクエリ文字列で URL を要求すると、通常、パラメータが(または同様の)?somethingとして入ってくることがわかります。something=nil

MediaWiki は PHP で書かれているため、少し異なる方法で処理される可能性がありますが、安全に実行できるように思われます$.params( { redirects: null } )。または、正しい文字列を追加して自分で作成するだけです。

于 2012-06-18T17:47:47.830 に答える