ホームページ バックエンド開発 PHPチュートリアル PHP をサーバー転送層として使用して、js_PHP チュートリアルの Ajax クロスドメイン アクセスの問題を解決する

PHP をサーバー転送層として使用して、js_PHP チュートリアルの Ajax クロスドメイン アクセスの問題を解決する

Jul 14, 2016 am 10:06 AM
ajax php する サーバ 使用 解決する アクセス クロスドメイン フォワード 会う 質問 必要

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

tru​​e

http://www.bkjia.com/PHPjc/477904.html

技術記事

js ajax アプリケーションを作成する場合、リクエストする必要があるインターフェイスが現在のドメインにないことがわかり、この時点でクロスドメイン アクセスの問題が発生し、ブラウザーによってこのインターフェイスのリクエストが禁止されます。 この時期の参拝方法は…

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

CakePHP の日付と時刻

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

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

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

CakePHP ファイルのアップロード

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

CakePHP ルーティング

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP について話し合う

CakePHP プロジェクトの構成 CakePHP プロジェクトの構成 Sep 10, 2024 pm 05:25 PM

CakePHP プロジェクトの構成

CakePHP クイックガイド CakePHP クイックガイド Sep 10, 2024 pm 05:27 PM

CakePHP クイックガイド

PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 PHP 開発用に Visual Studio Code (VS Code) をセットアップする方法 Dec 20, 2024 am 11:31 AM

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

See all articles