2016-10-25 12 views
3

返されたJSON結果をサーバーに文書化するにはどうすればよいですか?JsDocで返されたデータを文書化する方法

/** 
* Gets a user's data 
* @returns {jQuery} 
*/ 
function getUserData(userId){ 
    return $.get('/usr/' + userId); 
} 

上記の例では、返されたデータは、フェリックスが指摘するように、戻り値がJSONないよう

{ 
    "name" : "Bob", 
    "status" : 2 
} 
+0

* "上記の例では、返されるデータはJSONのオブジェクトになります。「*できません。 '$ .get'は同期です。実際には 'jqXHR'オブジェクトを返します。また、JavaScriptオブジェクトはJSONではありません。 –

+0

はいわかっています。それが私の質問のポイントで、なぜ「jQueryを返す」と言われていますか?私は、標準的な方法がある場合にこの結果を返すことができるデータを提供したいと思いますが、jsdocの例では見つかりません。 – BarryBones41

答えて

2
/** 
* Gets a user's data request 
* @return {jQuery.jqXHR} 
*/ 
function getUserData(userId){ 
    return $.getJSON('/usr/' + userId); 
} 

/* 
* Handles the result of a user data request. 
* @param {Object} data The JSON object, already converted to an Object. 
*/ 
function doSomethingWithUserData(data) { 
    console.log('do something with user data:', data); 
} 

getUserData(userId).done(handleUserData); 

としてJSONの対象となり、それはですオブジェクトでさえない。

引用JQuery's types documentation:jQueryの1.5のよう

、$アヤックス()メソッドは、XMLHTTPRequestオブジェクトのスーパーセットであるjqXHRオブジェクトを返します。 $.get$.getJSON$.ajaxのために、両方の略記法であるため、詳細については、$アヤックスエントリ

のjqXHRセクションを参照してください、同じことが当てはまります。

私はpromiseとハンドラを使用しています。私はハンドラから関数を作りましたので、より明確に文書化することができましたが、これはしばしば無名関数で行われます。

$.get$.getJSONに変換しました。が呼び出されます(文字列の返信がオブジェクトに変換されます)。 $.getのハンドラは代わりに@param {string}になります。コメントのOPで

アップデートは、将来DEVが呼び出しに期待するものを知っているように、カスタムデータでこれをどのように処理するかを尋ねました。

データを取得しましたので、これを文書化してみましょう。

複雑さや初期化を行う場合は、3つの良い解決策があります。

@propertyを使って@typedefを作成してプロパティを記述するのが最も簡単ですが、これは追加のコードを必要とせず、純粋にドキュメントです。使用中の

goog.provide('UserData'); 
/* 
* UserData (in the style of Closure's JSDocs) 
* @typedef {{ 
* name: {string}, 
* title: {string} 
* }} 
*/ 
UserData; 

または

/* 
* UserData (in the style of useJSDocs) 
* @typedef {Object} 
* @property {string} name 
* @property {string} title 
*/ 
var UserData; 

/* 
* Handles the result of a user data request. 
* @param {UserData} data The JSON object, already converted to an Object, 
* cast to UserData 
*/ 
function doSomethingWithUserData(data) { 
    console.log('do something with user data:', data); 
} 

と似ており、あなたにとってより有用である可能性が@interface @record。 最後に、あなたがlet user = new UserData(jsonUser)になっているまっすぐなクラスがあります。あなたがデフォルト設定/初期化を数行以上集めてクラスに入れることができれば、これは私が行くことを示唆しています。

+0

ここに私の状況は、おそらく私はそれをモードをクリアする必要があります:ファイルは、getUserData'と同じように100の "getFromServer"関数を持っているとします。新しい開発者は、各Ajaxリクエストから何が返されるのかを知る方法は?サーバーコードにアクセスできない場合はどうなりますか? – BarryBones41

+0

ええと。各クラスとしてのレスポンス。それがうまくいくと思います。あなたの例では、スクリプトを壊さずに 'UserData'をどのように書くことができますか? – BarryBones41

+0

@ BarryBones41申し訳ありませんが、私は宣言を含めるように例を更新しました。私はgoog.provideに慣れているので、答えを書くときに私がこれを完全に忘れてしまったので、goog.provideの例も含めています。 –