天我們通過一個簡單的例子來講述如何創(chuàng)建支持跨域調(diào)用的 JavaScript API。我相信很多人都嘗試實(shí)現(xiàn)類似的方法,但可能會遇到很多困難,因?yàn)闊o法通過正常的 AJAX 請求來訪問遠(yuǎn)程服務(wù)器并接收響應(yīng),這是因?yàn)闉g覽器的安全限制。下面我們將告訴你如何解決這個問題。
完整的示例代碼下載:source.zip
一. PHP
首先我們編寫一個簡單的服務(wù)端程序:
- <?php
-
- header('Access-Control-Allow-Origin: *');
- if (version_compare(phpversion(), '5.3.0', '>=') == 1)
- error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED);
- else
- error_reporting(E_ALL & ~E_NOTICE);
-
- $sAction = $_POST['action'];
- $iParam1 = (int)$_POST['param1'];
- $iParam2 = (int)$_POST['param2'];
-
- $iResult = 0;
- switch ($sAction) {
- case 'sum':
- $iResult = $iParam1 + $iParam2;
- break;
- case 'sub':
- $iResult = $iParam1 - $iParam2;
- break;
- case 'mul':
- $iResult = $iParam1 * $iParam2;
- break;
- case 'div':
- $iResult = $iParam1 / $iParam2;
- break;
- }
-
- $aResult = array(
- 'result' => $iResult
- );
-
- header('Content-type: application/json');
- echo json_encode($aResult);
值得你關(guān)注的是第一行 PHP 代碼中的自定義 HEAD ‘Access-Control-Allow-Origin’. 它允許發(fā)送回應(yīng)到任意的服務(wù)器,甚至是不同域的。如果你要限制指定域名才能訪問,也是在這里設(shè)置。接下來是簡單的應(yīng)用邏輯,接受參數(shù)并處理請求,這里我們實(shí)現(xiàn)的是最簡單的加減乘除操作,返回的結(jié)果用 JSON 格式。
二. JavaScript
api.js
- function do_sum(param1, param2, cfunction) {
-
- $.ajax({
- type: 'POST',
- url: 'http://www.script-tutorials.com/demos/301/api.php',
- crossDomain: true,
- dataType: 'json',
- data: 'action=sum¶m1=' + param1 + '¶m2=' + param2,
- success: function(json) {
-
- cfunction(json);
- }
- });
- }
- function do_sub(param1, param2, cfunction) {
-
-
- $.ajax({
- type: 'POST',
- url: 'http://www.script-tutorials.com/demos/301/api.php',
- crossDomain: true,
- dataType: 'json',
- data: 'action=sub¶m1=' + param1 + '¶m2=' + param2,
- success: function(json) {
-
- cfunction(json);
- }
- });
- }
- function do_mul(param1, param2, cfunction) {
-
-
- $.ajax({
- type: 'POST',
- url: 'http://www.script-tutorials.com/demos/301/api.php',
- crossDomain: true,
- dataType: 'json',
- data: 'action=mul¶m1=' + param1 + '¶m2=' + param2,
- success: function(json) {
-
- cfunction(json);
- }
- });
- }
- function do_div(param1, param2, cfunction) {
-
- $.ajax({
- type: 'POST',
- url: 'http://www.script-tutorials.com/demos/301/api.php',
- crossDomain: true,
- dataType: 'json',
- data: 'action=div¶m1=' + param1 + '¶m2=' + param2,
- success: function(json) {
-
- cfunction(json);
- }
- });
- }
這是對服務(wù)器端方法的 JS 封裝,我準(zhǔn)備了 4 個 JavaScript 方法,分別是 do_sum, do_sub, do_mul 和 do_div. 每個方法對應(yīng)一個服務(wù)器的函數(shù)。一般來說,首先我們需要設(shè)置服務(wù)器 API 的 URL,這里是 http://www.script-tutorials.com/demos/301/api.php ,然后需要設(shè)置 crossDomain 為 true,最后設(shè)置數(shù)據(jù)格式為 json。請注意第三個參數(shù)是 cfunction,這是一個客戶端可定制的任意函數(shù)用來處理服務(wù)器端返回的數(shù)據(jù)。
三. 使用方法 (客戶端)
現(xiàn)在服務(wù)器端已經(jīng)準(zhǔn)備好了,接下來看看客戶端如何使用這個遠(yuǎn)程接口。
- <script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
- <script src="http://www.script-tutorials.com/demos/301/api.js"></script>
- <script type="text/javascript">
- $(document).ready(function() {
-
- var param1 = 5;
- var param2 = 10;
- do_sum(param1, param2, function(data) {
- $('#results').append(param1 + ' + ' + param2 + ' = ' + data.result + '
- ');
-
- param1 = 25;
- param2 = 15;
- do_sub(param1, param2, function(data) {
- $('#results').append(param1 + ' - ' + param2 + ' = ' + data.result + '
- ');
-
- param1 = 8;
- param2 = 5;
- do_mul(param1, param2, function(data) {
- $('#results').append(param1 + ' * ' + param2 + ' = ' + data.result + '
- ');
-
-
- param1 = 33;
- param2 = 11;
- do_sub(param1, param2, function(data) {
- $('#results').append(param1 + ' / ' + param2 + ' = ' + data.result + '
- ');
- });
- });
-
- });
- });
- });
- </script>
- <div id="results"></div>
在這個例子中,我們使用的是服務(wù)器端的 JavaScript 函數(shù),我們將上面的代碼簡化后的結(jié)果就是:
- var param1 = 5;
- var param2 = 10;
- do_sum(param1, param2, function(data) {
- $('#results').append(param1 + ' * ' + param2 + ' = ' + data.result + '
- ');
- });
我們傳遞了三個參數(shù),包括兩個數(shù)字和一個函數(shù)引用,我們將在這個函數(shù)中接收到服務(wù)器的回應(yīng)信息,然后可將它們顯示出來。 本文出自:億恩科技【mszdt.com】
服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM]
|