PHP をサーバー転送層として使用して、js_PHP チュートリアルの Ajax クロスドメイン アクセスの問題を解決する
Jul 14, 2016 am 10:06 AM
js ajax アプリケーションを作成する場合、リクエストする必要があるインターフェイスが現在のドメインにないことがわかり、この時点でクロスドメイン アクセスの問題が発生し、ブラウザーによってこのインターフェイスのリクエストが禁止されます。
現時点でこの WebService のインターフェースにアクセスするにはどうすればよいですか?
簡単な方法は、このドメインのサーバーに転送レイヤーを追加し、ブラウザーからリクエストを受信した後、サーバー経由で対応する WebService にリクエストを転送し、返された結果を取得して js に送信します。リクエストページ。
一般的に言えば、これはクロスドメイン アクセスを解決する最も安全で互換性のある方法です。
以下は、この転送プロセスを完了するために私が書いた php スクリプトです (参考のみ)。
[php]
<?php
/**
* Ajax ビジネス処理のインターフェイス転送層は、Ajax クロスドメイン アクセスの問題を解決します
* 動作原理: リクエストはこのプログラムを通じて転送され、リモートサービスインターフェースとの対話はローカルサーバー層で完了します
* 注: 使用する場合、URL_ROOT パラメーターはターゲット インターフェイス アドレスに応じて変更する必要があります。この転送レイヤーは単一インターフェイスの Web サービス インターフェイス サービスに使用できます
。
* プログラムは POST データと GET 数量の同時転送をサポートします。
* @バージョン 1.0.0.2
* @著者 JerryLi lijian@dzs.mobi
* @copyright b.dzs.mobi 2012-11-16
**/
クラスインターフェース_リレー
{
/**インターフェイスのルート アドレス (これは変更する必要があります)*/
const URL_ROOT = 'http://api.air-id.net/InterFace/';
/**キャラクターセット*/
const CHARSET = 'UTF-8';
/**得る*/
プライベート $msGets = '';
/**役職*/
プライベート $maGetPostData = array();
関数 __construct()
{
$this->get
* POSTデータをロード
* @return bool
*();
$this->get
* GETデータをロード
* @return bool
*();
if($this->msGets != '' || count($this->maGetPostData) > 0)
{ //输入力データが存在します
if(count($this->msGets) > 0)
$sUrl = self::URL_ROOT .'?'。 $this->msGets;
その他
$sUrl = self::URL_ROOT;
header('Content-Type: text/html; charset='.self::CHARSET);
echo $this->getContent($sUrl);
}
その他
{
header('Content-Type: text/html; charset='.self::CHARSET);
echo $this->getContent(self::URL_ROOT);
}
}
関数 __destruct()
{
unset($maGetPostData, $msGets);
}
/**
* ダウンロード&データ
* @return bool
* */
プライベート関数 get&()
{
$handle = @fopen('php://input', 'r');
$データ = '';
してください
{
$data = @fread($handle, 1024);
if (strlen($data) == 0)
壊す;
その他
$this->maGetPostData[] = $data;
}while(true);
fclose($handle);
unset($data, $handle);
戻り値 ($this->maGetPostData) >= 1;
}
/**🎜
* ダウンロード&データ🎜
* @return bool🎜
* */ 🎜
プライベート関数 get&() 🎜{ www.2cto.com
/*GET コンテンツを取得*/
If (count($_GET) > 0)
$aTmp = array();
foreach ($_GET as $sKey => $sVal)
$aTmp[] = $sKey .'='
$this->msGets = implode('&', $aTmp);
true を返します。
}
それ以外
false を返します。
}
/**
* リモートインターフェースから返されたコンテンツを読み取ります
* @戻り文字列
**/
プライベート関数 getContent($sGetUrl)
{
/**/
$ch =curl_init();
curl_setopt ($ch, CURLOPT_URL, $sGetUrl) // GET URL アドレスを設定します
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, true);// 結果を文字列として保存します
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 10);//接続タイムアウト s
curl_setopt ($ch, CURLOPT_TIMEOUT, 10) //実行タイムアウト時間 s
;
curl_setopt ($ch, CURLOPT_DNS_CACHE_TIMEOUT, 1800);//DNS 解決キャッシュの保存時間は 30 分です
curl_setopt($ch, CURLOPT_HEADER,0) // ヘッダー情報を失います
;
If (count($this->maGetPostData) > 0)
{ //送信する必要のある POST データがあります
curl_setopt($ch, CURLOPT_POST, 1) //POST データを有効にする
;
curl_setopt($ch, CURLOPT_POSTFIELDS, implode('', $this->maGetPostData));//POST データを送信する
}
$sData =curl_exec($ch);
curl_close($ch);
設定解除($ch);
$sData を返します。
}
}
$o = 新しいインターフェースリレー();
設定を解除($o);
?>
http://www.bkjia.com/PHPjc/477904.html
www.bkjia.com
true
js ajax アプリケーションを作成する場合、リクエストする必要があるインターフェイスが現在のドメインにないことがわかり、この時点でクロスドメイン アクセスの問題が発生し、ブラウザーによってこのインターフェイスのリクエストが禁止されます。 この時期の参拝方法は…

人気の記事

人気の記事

ホットな記事タグ

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法
