JSON の送受信を jQuery なしで行ってみる

[jQuery](https://jquery.com/) を使いたくない場合向けに...
WEB上のあちらこちらで紹介されている（しかしいまいちまとまっていない気が）、[JavaScript](https://ja.wikipedia.org/wiki/JavaScript) ([AJAX](https://ja.wikipedia.org/wiki/Ajax))や [PHP](https://ja.wikipedia.org/wiki/PHP:_Hypertext_Preprocessor) や [ASP.NET(MVC)](https://ja.wikipedia.org/wiki/ASP.NET_MVC_Framework) による [JSON](https://ja.wikipedia.org/wiki/JavaScript_Object_Notation) の送受信コード例をまとめました。初歩的な内容でスミマセンが、随時修正や補足追加をしていきたいと思います。
以下、変数 data を JSON文字列でやりとりする例を示します。

#JavaScript の XMLHttpRequest
IE7以前は [XMLHttpRequest](https://ja.wikipedia.org/wiki/XMLHttpRequest) が使えず、"[Microsoft.XMLHTTP](http://hyuki.com/yukiwiki/wiki.cgi?StoryOfXmlhttp)"を利用していました。
##送信
```js
var xhr = new XMLHttpRequest();
var jsonText = JSON.stringify(data); // ここで、dataをJSON文字列に変換
xhr.open("POST", "http://sample/folder/");
xhr.setRequestHeader('Content-Type', 'application/json');
xhr.send(jsonText);

```
+ [XMLHttpRequest API](https://developer.mozilla.org/ja/docs/Web/API/XMLHttpRequest)
+ [XMLHttpRequest.setRequestHeader() メソッド](https://developer.mozilla.org/ja/docs/Web/API/XMLHttpRequest/setRequestHeader)
+ [XMLHttpRequest.send() メソッド](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send)
+ [JSON オブジェクト](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON)
+ [JSON.stringify() メソッド](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)

##受信
```js
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function()
{
 if(this.readyState == 4) {
     if (this.status == 200){
       data = this.response;
     }
 }
};
xhr.open("GET", "http://sample/folder2/", true); // POSTでも利用可能
xhr.responseType = 'json'; // これを指定しないと、responseにJSON文字列が返る
xhr.send();
```
+[XMLHttpRequest.readyState プロパティ](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/readyState)
+[XMLHttpRequest.status プロパティ](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/status)
+[XMLHttpRequest.onreadystatechange イベント](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/onreadystatechange)

#PHP
##送信
```php
$json_string = json_encode($data); // ここで、$dataをJSON文字列に変換
header("Content-Type: application/json; charset=utf-8");
echo $json_string;
```
+ [json_encode メソッド](http://php.net/manual/ja/function.json-encode.php)
+ [header メソッド](http://php.net/manual/ja/function.header.php)

##受信
```php
$json_string = file_get_contents('php://input');
$data = json_decode($json_string);
```
+ [json_decode メソッド](http://php.net/manual/ja/function.json-decode.php)

#.NET Framework (ASP.NET MVC)
[C#](https://ja.wikipedia.org/wiki/C_Sharp) でのコード例です。
##送信
コントローラで...

```csharp
public class MyController : Controller {
  //...
  public ActionResult Index()
  {
    //...
    return Json(data);
  }
}
```
+ [Controller (System.Web.Mvc.Controller クラス)](https://msdn.microsoft.com/ja-jp/library/system.web.mvc.controller.aspx)
+ [ActionResult (System.Web.Mvc.ActionResult クラス)](https://msdn.microsoft.com/ja-jp/library/system.web.mvc.actionresult.aspx)
+ [Json (System.Web.Mvc.JsonResult クラス)](https://msdn.microsoft.com/ja-jp/library/system.web.mvc.jsonresult.aspx)

##受信
こちらもコントローラで...

```csharp
public class MyController : Controller {
  //...
  // DataClass クラス（例）では、受け取りたいJSONデータの構造が定義されています。

  [HttpPost] // [HttpGet]でも、指定しない場合も可
  public ActionResult Index(DataClass data)
  {
    //...
  }
}
```