カテゴリー
コンピューター

AngularJS を使って Basic 認証が必要な PHP へ JSON データを POST するサンプルコード!

CORS を前提としたコードを書くときのポイント

  • AngularJS では $http のヘッダーに ‘Content-Type’: ‘application/x-www-form-urlencoded’ を追加する。しかし、Basic 認証をはじめ、カスタムヘッダーを追加する場合、この Content-Type 追加は意味が無い。
  • サーバでは、プリフライトリクエストがあった場合に対応する次のヘッダーをレスポンスに含めるようにする。
    • Access-Control-Allow-Origin:* ← 許可する接続元(* はどこからでも受け入れる)
    • Access-Control-Allow-Methods ← 許可するメソッド(POST など)
    • Access-Control-Allow-Headers ← 許可するヘッダー(authorization や独自のカスタムヘッダーなど)

CORS = HTTP access control = クロスサイト HTTP アクセス制限、とは?

  • ブラウザは、アクセスしたページ以外のドメインから何かを取ってくることを制限している。基本的にはできないようになっている。
  • そのため、たとえば次のようなことができない。ローカルホスト上のウェブサーバに AngularJS のサンプルを置いたとする。ページのボタンを押したら、とあるサイトからデータを取ってきて表示する。
  • ローカルホストドメインと、とあるサイトのドメインは異なる。ウェブブラウザでローカルホストのページを表示している。そのため、別ドメインであるとあるサイトのデータへのアクセスは制限される。
  • これは、セキュリティ上の観点から施された、ブラウザの仕様

リクエストを送信するウェブブラウザから見た CORS 時に必要な措置

カテゴリー
コンピューター

Windows 10 に Yeoman をインストールして、AngularJS 開発を始める環境を構築する手順

Yeoman を導入する環境

  • MacBook  Pro (Retina, 13-inch, Late 2012)
  • Boot Camp バージョン 5.1
  • Windows 10 Pro

Yeoman を導入する大まかな進め方

の公式チュートリアルを途中まで実践いたします。今回の目的は環境構築ですので、Step 5: Preview your app in the browser まで行います。他には、

の「Ruby インストール」「Bundler, Compass インストール」以外も参考にいたします。

手順 0. Yeoman を導入するにあたってのポイント

カテゴリー
コンピューター

【AngularJS】一覧・詳細画面ごとのコントローラー間でデータ共有しているサンプル【Monaca】【Onsen UI】

一覧、詳細のコントローラー間でデータを共有する AngularJS アプリサンプル!

【AngularJS 】ページにバインドした $scope を別のコントローラと共有・同期したい【Monaca 】【Onsen UI】 | oki2a24 の続編となります

今まで、Monaca に Onsen UI を組み込んで AngularJS を駆使して次の 2 つのデータ共有方法を学習してまいりました♪

  • レベル1. 同じページに複数のコントローラー
  • レベル2. 異なるページに複数のコントローラー

そして、次の点を学びました。

  • ファクトリーオブジェクトは 1 つのみ存在する。
  • $scope はファクトリーの参照である。
  • ファクトリーまたは $scope のどちらのプロパティの値を変更しても、すべてのコントローラーのデータが即時で同期される
  • ファクトリーまたは $scope のどちらにプロパティを追加しても、すべてのコントローラーのデータが即時で同期される

実際のアプリでは、一覧画面でひとつを選択して詳細画面へ行き、編集や削除を行い、一覧画面へ戻る、そのとき詳細画面の変更内容は一覧画面へ反映済み、という動きが普通と存じます。

今回は、そのようなケースを想定して次のような仕様のサンプルを作ります。

  • 一覧画面: 一覧データはサーバから取得してメモリに保存(ただしサンプルなのでダミーの JSON ファイルを作って使う)
  • 一覧画面 → 詳細画面の移動時: サーバから詳細データを取得してメモリに保存(ただしサンプルなのでダミーの JSON ファイルを作って使う)
  • 詳細画面: 内容を変更して「変更」ボタンをタップしたら、サーバへ内容を送信し、詳細メモリ・一覧メモリの内容も更新する。(ただしサンプルなのでサーバへ変更内容は送信しない)

ネットワーク通信は実際には行いません。一覧から詳細への移動時は毎回ダミーの JSON ファイルからデータを取得いたします。したがいまして、詳細画面が表示される時は毎回同じデータです。

レベル3. 異なるページに複数のコントローラーでデータはオブジェクトの配列

カテゴリー
コンピューター

【AngularJS】自作のカスタムフィルタで true、false を変換して表示するコード

やりたい事

  • true、false を HTML では任意のフォーマットに変換して表示したい。
  • たとえば、true ⇒ ○、false ⇒ ×
  • AngularJS を使いたい。

調べてみますと、フィルタという機能を使えば、たとえば「1」を「$1」と表示形式を指定できるようです。

さらに、自作のフィルタも作ることができるそうですので、やってみました♪

カスタムフィルタのサンプルコード

カテゴリー
コンピューター

AngularJS の date フィルタで日本語の曜日を表示するサンプル

ポイント

  • 国際化、i18n、多言語対応用 JavaScript ファイルを読み込む。
  • date フィルターの使い方は同じ。

i18n ファイルの導入・入手手順

カテゴリー
コンピューター

【AngularJS 】ページにバインドした $scope を別のコントローラと共有・同期したい【Monaca 】【Onsen UI】

AngularJS でデータ共有用のファクトリーを生成し、複数のコントローラーに注入することでコントローラー間でデータ同期を取る

【まとめ】AngularJS でデータ共有用のファクトリーを生成し、複数のコントローラーに注入したときのふるまい・ポイント

  • ファクトリーオブジェクトは 1 つのみ存在する。
  • $scope はファクトリーの参照である。
  • ファクトリーまたは $scope のどちらのプロパティの値を変更しても、すべてのコントローラーのデータが即時で同期される
  • ファクトリーまたは $scope のどちらにプロパティを追加しても、すべてのコントローラーのデータが即時で同期される

はじめに

  • Monaca で iOS アプリを作っている
  • 一覧ページと詳細ページがあり、それぞれ別の AngularJS のコントローラーが紐付いている
  • 一覧ページで選択したデータは、移動先の詳細ページで値を更新できる
  • 詳細ページで更新した値は一覧ページの値へも反映されていてほしい

こんなことを実現したいのですけれども、コントローラー間でデータの共有ってできるのかしら?

カテゴリー
Linux

AngularJS を使って Basic 認証が必要な PHP へ JSON データを POST できません><

追記。問題解決できました!

以下、追記前の本文です♪

  1. 【Nginx】Basic 認証をかける方法手順メモ | oki2a24
  2. cURL を使って Basic 認証が必要な PHP へ JSON データを POST する手順メモ | oki2a24
  3. AngularJS を使って PHP へ JSON データを POST する方法 | oki2a24

と試行錯誤してまいりました。これらに続きまして、AngularJS を使って Basic 認証が必要な PHP へ JSON データを POST する方法を探っております!

できませんの><。

今回はせめてどのような結果となったのか、残しておきますの><。

カテゴリー
Linux

AngularJS を使って PHP へ JSON データを POST する方法

追記。「ログインページを介さず Basic 認証」シリーズの投稿一覧です♪

  1. 【Nginx】Basic 認証をかける方法手順メモ | oki2a24
  2. cURL を使って Basic 認証が必要な PHP へ JSON データを POST する手順メモ | oki2a24
  3. AngularJS を使って PHP へ JSON データを POST する方法 | oki2a24
  4. AngularJS を使って Basic 認証が必要な PHP へ JSON データを POST できません>< | oki2a24
  5. AngularJS を使って Basic 認証が必要な PHP へ JSON データを POST するサンプルコード! | oki2a24

追記終わり!

AngularJS を使用してウェブブラウザのページでボタンを押すと、サーバへ JSON データを POST して PHP で受け取ってファイルに出力したい。

AngularJS を使用してウェブブラウザのページでボタンを押すと、サーバへ JSON データを POST して PHP で受け取ってファイルに出力してみようと試みました!

苦労しましたので、記録を残しますわ♪

ポイント

  • AngularJS で サーバに JSON をポストしたところエラーとなった。
    • フロント側では、Access-Control-Allow-Origin のエラーが発生していた。
    • サーバ側では method が POST ではなく、OPTIONS となっていた。
  • クロスドメイン問題が原因だった。
    • ちなみに、異なるドメインのデータにアクセスすることを、クロスドメインという。
  • フロント側、サーバ側の両方で対応する必要がある。
    • フロント側では、config で $httpProvider の Content-Type で x-www-form-urlencoded を設定する。
    • サーバ側では、header(‘Access-Control-Allow-Origin: *’); を設定してやる。

エラーが発生した AngularJS のコード抜粋

カテゴリー
コンピューター

【AngularJS】現在時刻をリアルタイムに表示する時計サンプル

目的・実現方法

  • リアルタイムの時間を AngularJS を使って表示したい。
  • HTML タグを書いたところに自動的に時刻を挿入したい。
  • 時間のフォーマットを HTML タグ内で指定したい。

JavaScript 側で機能を作ったら、HTML 側では機能を意識しないで使いたいですの。つまり、AngularJS と HTML の結びつきが薄い、疎な状態なものを作りたいですわ♪