jQuery ajax を使ってサーバ側 php のWebアプリケーション を動かしてみる

公開日| 2012年9月19日   更新日| 2012年9月19日   コメントはありません。

今回は、Wordpressで jQuery の ajax を使ってみます。

ajaxとは、
ウェブブラウザ内で非同期通信とインターフェイスの構築などを行う技術の総称を言います。(wikipedia)
従来のWebアプリケーションでは、サーバにリクエストを送信後、レスポンスを新たにウェブページとして受け取ることで画面遷移が発生していましたが、 Ajaxにより画面遷移を伴わない動的なWebアプリケーションの製作が実現可能になります。 例えばWeb検索に応用することで、従来は入力確定後に行っていた検索を、ユーザがキー入力をする間にバックグラウンドで行うことによってリアルタイムに検索結果を表示していくといったことが可能になります。

jQuery の ajax を使うと、簡単にかつ動的に サーバーのウェブアプリケーションにアクセスすることができます。
最も簡単なウェブアプリケーションへのアクセス方法は、URLで直接指定することです。 例えば、

http://wordpress-setting.info/test/test_php.php

のようにphpファイルを直接アクセスすることで、サーバー側のアプリケーション(ソフト)を起動することができます。

しかし、これでは、毎回毎回アプリケーションの結果を表示するためにページ全体が切り替わってしまいます。

そこで、ajax の出番です。

ajax を使うことで、ページの一部分に動的にサーバー側のアプリケーションの処理結果を表示することができようになります。

簡単なサンプルを作って jQuery ajax を動かしてみる

以下のような簡単なサンプルを作成してみたので、簡単に解説しておきます。
以降の各ソースコードは、クライアント側のjavascript(jQuery)のソースコードと、サーバー側のphpのソースコード(test_php.php) の2つになります。

いずれも非常に簡単なソースコードで、以下のような処理の流れになっています。


[クライアント側]
待ちGIF動画を見せて  サーバーへアクセスして      結果を表示する。
                                     |                      ↑
        +----------------------------+                       |
        ↓                                                   |
[サーバー側]                                                |
アクセスが着たら1秒待ち  サーバー情報、パラメータなどを出力して終了する。

では、それぞれを詳しく見てみてましょう。


クライアント側のjavascript(jQuery)のソースコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<input type="button" id="answer" value="実行"/><br />
<div id="ans"></div> 
<script type="text/javascript">
<!--
(function($){
	$("#answer").click(function(){
		//	アクセス先URL
		var address   =  'http://wordpress-setting.info/webapp/test_php.php';
		//	パラメータ
		var myString = 'a=1&b=日本語パラメータ';
		//	出力先ID
		var output_id =  '#ans';
		//	待ち状態のためのGIFアニメ
		var wait_imgs = '/images/ajax-loader.gif';
 
		//	処理に時間がかかるかもしれないので、gifアニメを表示しておく。
 		$(output_id).html( '<div align="center"><img src="'+ wait_imgs + '" alt="" /></div>' );
 		$(output_id).show( );
 
		//	jQuery.ajax
		$.ajax({
			url:address,	//	アクセス先URL
			data: myString,	//	パラメータ
			//type: "get", 	//	'post' を指定することもできる。デフォルト'get'なのであえて設定する必要はない。
 
			//	成功時の処理
			success: function( data, textStatus, jqXHR ) {
				$(output_id).html( data );
				$(output_id).show();
			},
			//	失敗の処理
			error: function (request, status, error) {
				$(output_id).html( request.responseText );
				$(output_id).show();
			}
		});
	});
})(jQuery);
//	-->
</script>  

17行目: 待ち画像を出力情報のタグへ設定、表示しています。

21-38行目: jQuery.ajax の設定、起動をしています。

22行目: ウェブアプリケーションのURLを指定しています。

23行目: ウェブアプリケーションへのパラメータを指定しています。これは、string情報でも、object情報でも可です。object情報の場合は、jQuery.ajaxにて文字コード変換が実施されます。

24行目: ウェブアプリケーションへアクセスタイプ(get ot post) を指定しています。ここでは、get を使うので省略可です。

27行目: ウェブアプリケーションへのアクセスが成功した際のハンドラ(処理)を指定しています。ここでは、出力情報のタグへ結果を設定、表示しています。

32行目: ウェブアプリケーションへのアクセスが失敗した際のハンドラ(処理)を指定しています。ここでは、出力情報のタグへ結果を設定、表示しています。

(function($){
...
})(jQuery);
の形式で括るのは、WordPressでjQueryを使ってみるで解説したとおりWordpress内でのプラグインなどによる他JavaScriptライブラリとの競合を回避するためです。

サーバー側のphpのソースコード(test_php.php)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php sleep(1); ?>
<p>テスト結果</p>
 
<table border="1" cellpadding="0" cellspacing="0">
<tr>
	<th style="background-color:#eee;">名前</th>
	<th style="background-color:#eee;">情報</th>
</tr>
<tr>
	<th align="left" style="background-color:#eee;">$_SERVER['SERVER_NAME']</th>
	<td align="left" style="background-color:#fff;"><?php echo $_SERVER['SERVER_NAME']; ?></td>
</tr>
<tr>
	<th align="left" style="background-color:#eee;">$_SERVER['SERVER_PROTOCOL']</th>
	<td align="left" style="background-color:#fff;"><?php echo $_SERVER['SERVER_PROTOCOL']; ?></td>
</tr>
<tr>
	<th align="left" style="background-color:#eee;">$_SERVER['REQUEST_METHOD']</th>
	<td align="left" style="background-color:#fff;"><?php echo $_SERVER['REQUEST_METHOD']; ?></td>
</tr>
<tr>
	<th align="left" style="background-color:#eee;">$_SERVER['REQUEST_TIME']</th>
	<td align="left" style="background-color:#fff;"><?php echo date('Y/m/d H:m:s',$_SERVER['REQUEST_TIME']); ?></td>
</tr>
<tr>
	<th align="left" style="background-color:#eee;">$_SERVER['REQUEST_URI']</th>
	<td align="left" style="background-color:#fff;"><?php echo $_SERVER['REQUEST_URI']; ?></td>
</tr>
<tr>
	<th align="left" style="background-color:#eee;">$_REQUEST</th>
	<td align="left" style="background-color:#fff;"><pre><?php var_dump($_REQUEST); ?></pre></td>
</tr>
</table>

1行目: 1秒間の待ちです。ウェブブラウザに待ち画像を表示させるための待ちです。待ち動画の確認のためで、本来は必要ありません。

10行目: 自サーバー名を出力しています。

14行目: アクセスプロトコルを出力しています。

18行目: 要求メソッド(方法)を出力しています。

22行目: 要求時刻を出力しています。

26行目: 要求URIを出力しています。

30行目: 要求パラメータの全出力を行っています。


以下は、その実施例です。試しに実行ボタンをクリックしてみてください。

実施例


かなり簡単にできてしまうものですね。
jQuery.ajaxなど無いときは、自前でパラメータをエンコードしてパラメータ付URLへ変換してアクセスして、さらにハンドラも自前でこさえて大変でしたが、 非常に簡単ですね。

jQuery.ajax には、他にも設定可能なパラメータがいっぱいあります。参考までに以下に記述しておきます。


  • accepts Map

    Default: depends on DataType

    The content type sent in the request header that tells the server what kind of response it will accept in return. If the accepts setting needs modification, it is recommended to do so once in the $.ajaxSetup() method.

  • async Boolean

    Default: true

    By default, all requests are sent asynchronously (i.e. this is set to true by default). If you need synchronous requests, set this option to false. Cross-domain requests and dataType: “jsonp” requests do not support synchronous operation. Note that synchronous requests may temporarily lock the browser, disabling any actions while the request is active. As of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated; you must use the complete/success/error callbacks.

  • beforeSend(jqXHR, settings) Function

    A pre-request callback function that can be used to modify the jqXHR (in jQuery 1.4.x, XMLHTTPRequest) object before it is sent. Use this to set custom headers, etc. The jqXHR and settings maps are passed as arguments. This is an Ajax Event. Returning false in the beforeSend function will cancel the request. As of jQuery 1.5, the beforeSend option will be called regardless of the type of request.

  • cache Boolean

    Default: true, false for dataType ‘script’ and ‘jsonp’

    If set to false, it will force requested pages not to be cached by the browser. Setting cache to false also appends a query string parameter, “_=[TIMESTAMP]”, to the URL.

  • complete(jqXHR, textStatus) Function, Array

    A function to be called when the request finishes (after success and error callbacks are executed). The function gets passed two arguments: The jqXHR (in jQuery 1.4.x, XMLHTTPRequest) object and a string categorizing the status of the request (“success”, “notmodified”, “error”, “timeout”, “abort”, or “parsererror”). As of jQuery 1.5, the complete setting can accept an array of functions. Each function will be called in turn. This is an Ajax Event.

  • contents(added 1.5) Map

    A map of string/regular-expression pairs that determine how jQuery will parse the response, given its content type.

  • contentType String

    Default: ‘application/x-www-form-urlencoded; charset=UTF-8’

    When sending data to the server, use this content type. Default is “application/x-www-form-urlencoded; charset=UTF-8”, which is fine for most cases. If you explicitly pass in a content-type to $.ajax(), then it’ll always be sent to the server (even if no data is sent). If no charset is specified, data will be transmitted to the server using the server’s default charset; you must decode this appropriately on the server side.

  • context Object

    This object will be made the context of all Ajax-related callbacks. By default, the context is an object that represents the ajax settings used in the call ($.ajaxSettings merged with the settings passed to $.ajax). For example, specifying a DOM element as the context will make that the context for the complete callback of a request, like so:

    $.ajax({
      url: "test.html",
      context: document.body
    }).done(function() { 
      $(this).addClass("done");
    });
  • converters(added 1.5) Map

    Default: {“* text”: window.String, “text html”: true, “text json”: jQuery.parseJSON, “text xml”: jQuery.parseXML}

    A map of dataType-to-dataType converters. Each converter’s value is a function that returns the transformed value of the response.

  • crossDomain(added 1.5) Boolean

    Default: false for same-domain requests, true for cross-domain requests

    If you wish to force a crossDomain request (such as JSONP) on the same domain, set the value of crossDomain to true. This allows, for example, server-side redirection to another domain.

  • data Object, String

    Data to be sent to the server. It is converted to a query string, if not already a string. It’s appended to the url for GET-requests. See processData option to prevent this automatic processing. Object must be Key/Value pairs. If value is an Array, jQuery serializes multiple values with same key based on the value of the traditional setting (described below).

  • dataFilter(data, type) Function

    A function to be used to handle the raw response data of XMLHttpRequest.This is a pre-filtering function to sanitize the response. You should return the sanitized data. The function accepts two arguments: The raw data returned from the server and the ‘dataType’ parameter.

  • dataType String

    Default: Intelligent Guess (xml, json, script, or html)

    The type of data that you’re expecting back from the server. If none is specified, jQuery will try to infer it based on the MIME type of the response (an XML MIME type will yield XML, in 1.4 JSON will yield a JavaScript object, in 1.4 script will execute the script, and anything else will be returned as a string). The available types (and the result passed as the first argument to your success callback) are:

    • “xml”: Returns a XML document that can be processed via jQuery.
    • “html”: Returns HTML as plain text; included script tags are evaluated when inserted in the DOM.
    • “script”: Evaluates the response as JavaScript and returns it as plain text. Disables caching by appending a query string parameter, “_=[TIMESTAMP]”, to the URL unless the cache option is set to true. Note: This will turn POSTs into GETs for remote-domain requests.
    • “json”: Evaluates the response as JSON and returns a JavaScript object. In jQuery 1.4 the JSON data is parsed in a strict manner; any malformed JSON is rejected and a parse error is thrown. (See json.org for more information on proper JSON formatting.)
    • “jsonp”: Loads in a JSON block using JSONP. Adds an extra “?callback=?” to the end of your URL to specify the callback. Disables caching by appending a query string parameter, “_=[TIMESTAMP]”, to the URL unless the cache option is set to true.
    • “text”: A plain text string.
    • multiple, space-separated values: As of jQuery 1.5, jQuery can convert a dataType from what it received in the Content-Type header to what you require. For example, if you want a text response to be treated as XML, use “text xml” for the dataType. You can also make a JSONP request, have it received as text, and interpreted by jQuery as XML: “jsonp text xml.” Similarly, a shorthand string such as “jsonp xml” will first attempt to convert from jsonp to xml, and, failing that, convert from jsonp to text, and then from text to xml.
  • error(jqXHR, textStatus, errorThrown) Function

    A function to be called if the request fails. The function receives three arguments: The jqXHR (in jQuery 1.4.x, XMLHttpRequest) object, a string describing the type of error that occurred and an optional exception object, if one occurred. Possible values for the second argument (besides null) are “timeout”, “error”, “abort”, and “parsererror”. When an HTTP error occurs, errorThrown receives the textual portion of the HTTP status, such as “Not Found” or “Internal Server Error.” As of jQuery 1.5, the error setting can accept an array of functions. Each function will be called in turn. Note: This handler is not called for cross-domain script and JSONP requests. This is an Ajax Event.

  • global Boolean

    Default: true

    Whether to trigger global Ajax event handlers for this request. The default is true. Set to false to prevent the global handlers like ajaxStart or ajaxStop from being triggered. This can be used to control various Ajax Events.

  • headers(added 1.5) Map

    Default: {}

    A map of additional header key/value pairs to send along with the request. This setting is set before the beforeSend function is called; therefore, any values in the headers setting can be overwritten from within the beforeSend function.

  • ifModified Boolean

    Default: false

    Allow the request to be successful only if the response has changed since the last request. This is done by checking the Last-Modified header. Default value is false, ignoring the header. In jQuery 1.4 this technique also checks the ‘etag’ specified by the server to catch unmodified data.

  • isLocal(added 1.5.1) Boolean

    Default: depends on current location protocol

    Allow the current environment to be recognized as “local,” (e.g. the filesystem), even if jQuery does not recognize it as such by default. The following protocols are currently recognized as local: file, *-extension, and widget. If the isLocal setting needs modification, it is recommended to do so once in the $.ajaxSetup() method.

  • jsonp String

    Override the callback function name in a jsonp request. This value will be used instead of ‘callback’ in the ‘callback=?’ part of the query string in the url. So {jsonp:’onJSONPLoad’} would result in ‘onJSONPLoad=?’ passed to the server. As of jQuery 1.5, setting the jsonp option to false prevents jQuery from adding the “?callback” string to the URL or attempting to use “=?” for transformation. In this case, you should also explicitly set the jsonpCallback setting. For example, { jsonp: false, jsonpCallback: “callbackName” }

  • jsonpCallback String, Function

    Specify the callback function name for a JSONP request. This value will be used instead of the random name automatically generated by jQuery. It is preferable to let jQuery generate a unique name as it’ll make it easier to manage the requests and provide callbacks and error handling. You may want to specify the callback when you want to enable better browser caching of GET requests. As of jQuery 1.5, you can also use a function for this setting, in which case the value of jsonpCallback is set to the return value of that function.

  • mimeType(added 1.5.1) String

    A mime type to override the XHR mime type.

  • password String

    A password to be used in response to an HTTP access authentication request.

  • processData Boolean

    Default: true

    By default, data passed in to the data option as an object (technically, anything other than a string) will be processed and transformed into a query string, fitting to the default content-type “application/x-www-form-urlencoded”. If you want to send a DOMDocument, or other non-processed data, set this option to false.

  • scriptCharset String

    Only for requests with “jsonp” or “script” dataType and “GET” type. Forces the request to be interpreted as a certain charset. Only needed for charset differences between the remote and local content.

  • statusCode(added 1.5) Map

    Default: {}

    A map of numeric HTTP codes and functions to be called when the response has the corresponding code. For example, the following will alert when the response status is a 404:

    $.ajax({
      statusCode: {
        404: function() {
          alert("page not found");
        }
      }
    });

    If the request is successful, the status code functions take the same parameters as the success callback; if it results in an error, they take the same parameters as the error callback.

  • success(data, textStatus, jqXHR) Function, Array

    A function to be called if the request succeeds. The function gets passed three arguments: The data returned from the server, formatted according to the dataType parameter; a string describing the status; and the jqXHR (in jQuery 1.4.x, XMLHttpRequest) object. As of jQuery 1.5, the success setting can accept an array of functions. Each function will be called in turn. This is an Ajax Event.

  • timeout Number

    Set a timeout (in milliseconds) for the request. This will override any global timeout set with $.ajaxSetup(). The timeout period starts at the point the $.ajax call is made; if several other requests are in progress and the browser has no connections available, it is possible for a request to time out before it can be sent. In jQuery 1.4.x and below, the XMLHttpRequest object will be in an invalid state if the request times out; accessing any object members may throw an exception. In Firefox 3.0+ only, script and JSONP requests cannot be cancelled by a timeout; the script will run even if it arrives after the timeout period.

  • traditional Boolean

    Set this to true if you wish to use the traditional style of param serialization.

  • type String

    Default: ‘GET’

    The type of request to make (“POST” or “GET”), default is “GET”. Note: Other HTTP request methods, such as PUT and DELETE, can also be used here, but they are not supported by all browsers.

  • url String

    Default: The current page

    A string containing the URL to which the request is sent.

  • username String

    A username to be used in response to an HTTP access authentication request.

  • xhr Function

    Default: ActiveXObject when available (IE), the XMLHttpRequest otherwise

    Callback for creating the XMLHttpRequest object. Defaults to the ActiveXObject when available (IE), the XMLHttpRequest otherwise. Override to provide your own implementation for XMLHttpRequest or enhancements to the factory.

  • xhrFields(added 1.5.1) Map

    A map of fieldName-fieldValue pairs to set on the native XHR object. For example, you can use it to set withCredentials to true for cross-domain requests if needed.

    $.ajax({
       url: a_cross_domain_url,
       xhrFields: {
          withCredentials: true
       }
    });

    In jQuery 1.5, the withCredentials property was not propagated to the native XHR and thus CORS requests requiring it would ignore this flag. For this reason, we recommend using jQuery 1.5.1+ should you require the use of it.

ここで使ったのは、赤文字のものだけです。如何に最小限のパラメータのみをここで使ったかがご理解いただけたのではないでしょうか。
でも、ほとんどの場合は、ここで使ったパラメータで事足りることと思います。

上記では、jQuery.ajaxでパラメータ(data)をstringで設定していますが、以下のようにobjectで { パラメータ名 : パラメータ値} の形式でもOKです。
この場合、自動的にURLのパラメータ用にエンコードしてくれます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<input type="button" id="answer" value="実行"/><br />
<div id="ans"></div> 
<script type="text/javascript">
<!--
(function($){
	$("#answer").click(function(){
		//	アクセス先URL
		var address   =  'http://wordpress-setting.info/webapp/test_php.php';
		//	パラメータ
		var myObject = { 
				a: {
					one: 1, 
					two: 2, 
					three: 3
				}, 
				b: [1,2,3]
			};
		//	出力先ID
		var output_id =  '#ans';
		//	待ち状態のためのGIFアニメ
		var wait_imgs = '/images/ajax-loader.gif';
 
		//	処理に時間がかかるかもしれないので、gifアニメを表示しておく。
 		$(output_id).html( '<div align="center"><img src="'+ wait_imgs + '" alt="" /></div>' );
 		$(output_id).show( );
 
		//	jQuery.ajax
		$.ajax({
			url:address,	//	アクセス先URL
			data: myObject,	//	パラメータ
			//type: "get", 	//	'post' を指定することもできる。デフォルト'get'なのであえて設定する必要はない。
 
			//	成功時の処理
			success: function( data, textStatus, jqXHR ) {
				$(output_id).html( data );
				$(output_id).show();
			},
			//	失敗の処理
			error: function (request, status, error) {
				$(output_id).html( request.responseText );
				$(output_id).show();
			}
		});
	});
})(jQuery);
//	-->
</script>  

でも、jQueryは、本当に便利ですね。
Wordpressの記事の中で、動的にサーバーが情報を取り出したい時には、非常に便利だと思います。まずは、一度試されるのも良いかもしれません。


コメント

口コミ・評判を投稿 :

ブラウザの JavaScriptが無効となっている場合、コメントの投稿はできません。
コメントを投稿するには、JavaScriptを有効にしてください

お名前 *

メールアドレス *
(口コミ・評判欄には、表示されませんが入力が必要です。)

サイトアドレス



  • はてなブックマークへ追加する
  • Facebookでシェアする
  • twitter でつぶやく
  • Google Plusでシェアする
  • Pocketでシェアする
ページトップへ