問題タブ [angularjs-resource]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
http - Angular: カスタム ヘッダーは $http と $resource によって無視されます。なんで?
私が制御していない REST サービスにアクセスしようとしています。最初の問題は、サービスに Access-Control-Allow-Origin ヘッダーが含まれていないことです。これは、私が正しく理解している場合、すぐに JSONP に制限される問題です。
また、デフォルトでは、このサービスは JSON を送信できますが、JSON ではなく XML を送信します。私の Accept ヘッダーに応答する必要があると思います。サービスの責任者は、私の Content-Type を見ていると言っています。これは、GET ではなく POST を実行する必要があることを意味します (ただし、静的データを取得するだけの場合は get の方が理にかなっていますよね?)。
私は頑固なので、最初に Accept ヘッダーを試しています。Angular は JSON のみを受け入れるため、デフォルトでヘッダーを使用することを期待しAccept: application/json
ますが、そうではなく、手動で設定しようとしても無視されます。
実際のリソースでこれをもう一度行います。
それでも、リクエスト ヘッダーにはAccept: */*
.
私の質問は:なぜですか?Angular がヘッダーを無視するのはなぜですか? とにかく、適切なヘッダーを使用するにはどうすればよいですか?
また、POSTでJSONPを使用する方法はありますか?
編集:もともとAngular 1.0.7を使用していましたが、1.2.3で試してみたところ、同じ結果が得られました。ヘッダーは無視されますが、誰もがこれがその方法だと主張しています。
また、$resource ではなく、$http で直接実行しようとしましたが、同じ結果になりました。
編集 2:ここにJSFiddleがあります。匿名化されており、実サーバーは使用していませんが、Firebug/開発者ツールを使用すると、ヘッダーAccept: */*
を設定しようと何度も試みたにもかかわらず、両方の呼び出しで送信されることを確認できます。application/json
そして、それが私の本当の問題です。私の実サーバーでは、実サーバーが JSON を送信できるにもかかわらず、XML の結果を取得しています。
(実際のサーバーが jsonp をサポートしているかどうかは、現時点ではそれほど重要ではありません。このダミー サーバーは明らかにサポートしていませんが、問題ありません。私はヘッダーが気になるだけです。)
編集3:以下に提案されている両方のソリューションを試しました:
私は両方のステートメントを別々に試しました。コントローラーで、次に http 呼び出し自体の直前のサービスで。それでもうまくいきません。
これが機能することが示されているJsFiddleを誰かに教えてもらえますか?
編集 4: JSONP ではなく GET を使用すると、Accept ヘッダーが正しいことに気付きました。しかし、正しいヘッダーがないため、応答は拒否されます。
JSONP 呼び出しにはどのような種類のヘッダーが必要ですか? JSONP 呼び出しにはさらに多くのヘッダーがありますが、それを JSONP として識別するものは何もないためです。これを機能させるには、サーバーが明示的な JSONP サポートを持っている必要がありますか? 私はjsonpについてほとんど知らないことに突然気づきました。
javascript - AngularJS: ビュー (ng-bind) で指定されたモデルを、API を介して利用可能な $resource にバインドする方法は?
私は(Angularで、クライアントで)同じデータベースオブジェクトをhtmlビューを介して、json APIを介して同等のインスタンスに接続しようとしています。
動作中の API と $resource があり、動作中のビューがあります。バインディングを作成する方法がわからないため、ビューを更新すると Angular モデル / $resource が更新されます。
具体的には、ngBind属性を含むhtmlビューがサーバー側に取り込まれています。
ページには一意の ID を持つこれらがいくつかあります。この例の目的上、これをフォーム テキスト フィールドと考える方が簡単な場合は、「contenteditable」を無視してください。その部分については個別に扱います。
その属性の形式は柔軟で、現在の状態です (つまり、post.1.text を post_1_text にするか、必要に応じて完全に分割することができます)。
リソース ファクトリは次のようになります (コーヒー スクリプトですが、js での回答も同様に感謝して受け取りました!:
これにより、posts コレクションが正常に作成されます (この例では必要ありませんが、API が機能していることを示しています)。
では、ng-bind はどのように見えるべきで、どのようにコントローラーをバインドして、API に書き戻されたビューの更新を取得するのでしょうか?
(私はただ使うことができることを知ってng_repeat: "post in posts"
いますが、私が本当にこれをやりたいと思っているだけです。「それは複雑です」:-)
ありがとう!
編集:これは、私が達成しようとしていることを大まかに示すjsfiddleです:
...しかし、配列内のオブジェクトのインデックスではなく、オブジェクト キー 'id' に ID をバインドしたいと思います。
javascript - AngularJSで状態の変化を待つ方法は?
Angular 1.2.3 を使用すると、次のようなサービスがあります。
私のコントローラーでは、アイテムを保存したいので、そうします
POST ハンドラーは、しばらく時間がかかる可能性があるイメージを生成します。呼び出しは非同期であるため、$save 呼び出しがすぐに戻ることを理解しています。POST ハンドラーが完了するとすぐに、ブール値のcalculationDone = true を持つアイテムが返されます。これは $scope に反映されます。
次に、生成された画像を表示します。上記のhtmlを使用しています。生成された画像への URL は既にわかっていますが、まだ解決されていないため、ng-src に入れることはできません。
アイテムの状態が変化したらすぐに ng-src を更新または再適用するにはどうすればよいですか?
promise を使用する必要がありますか? それとも$watch?
node.js - AngularJS で $http または $resource を使用して JSON データを含む POST リクエストを送信するにはどうすればよいですか?
postDataでサーバーにリクエストを送信したい。(JSON)
$http
私は次の要求を試みました、
var jsonData = {"id": 1, "名前": "xxx", "役職": "開発者", "部署": "IT"};
と
しかし、私は「$http と $resource リクエストの両方で入力エラーが終了したため、オブジェクトにマップするコンテンツがありません。
追加情報: * My client side application is running on Express serve with node.js
* 上記の方法のいずれかでこれを達成する方法を教えてもらえますか?