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

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

WBOY
WBOYオリジナル
2016-07-14 10:06:541124ブラウズ

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

tru​​e

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

技術記事

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

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