js ajax アプリケーションを作成する場合、リクエストする必要があるインターフェイスが現在のドメインにないことがわかり、この時点でクロスドメイン アクセスの問題が発生し、ブラウザーによってこのインターフェイスのリクエストが禁止されます。
現時点でこの WebService のインターフェースにアクセスするにはどうすればよいですか?
簡単な方法は、このドメインのサーバーに転送レイヤーを追加し、ブラウザーからリクエストを受信した後、サーバー経由で対応する WebService にリクエストを転送し、返された結果を取得して js に送信します。リクエストページ。
一般的に言えば、これはクロスドメイン アクセスを解決する最も安全で互換性のある方法です。
以下は、この転送プロセスを完了するために私が書いた 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 アプリケーションを作成する場合、リクエストする必要があるインターフェイスが現在のドメインにないことがわかり、この時点でクロスドメイン アクセスの問題が発生し、ブラウザーによってこのインターフェイスのリクエストが禁止されます。 この時期の参拝方法は…