0

私はいくつかのコントローラーAjaxを持っています。そのコントローラーはリクエストの検証を行い、ajaxからではない場合はエラーメッセージを返します。

関数is_ajax()はヘッダーX-Requested-Withをチェックし、trueまたはfalseを返します。

私はajaxからのこのリンクを使用しており、すべてが機能しています。

/ ajax / somecontroller / someaction

内部で使用しようとすると、ajaxリクエストではなく独自の検証エラーが発生します。

私のコードがあります:

$deleted = Request::factory("/ajax/somecontroller/someaction")
                        ->headers("Content-Type", "application/x-www-form-urlencoded")
                        ->headers('HTTP_X_REQUESTED_WITH', 'XmlHttpRequest')
                        ->headers('X-Requested-With', 'XmlHttpRequest')                            
                        ->method(Request::POST)
                        ->post(array(
                            "id_zone_comp" => $id_zone_comp
                        ))
                        ->execute()->body();

必要なヘッドを送信しましたが、エラーが発生しました。

外部のように内部リクエストを送信する方法は?

コハナ3.2。


もちろん、Ajaxなどの内部クエリを処理してis_internal()の後にアクセスを許可することもできますが、これは答えではありません。

4

1 に答える 1

1

あなたが直面している問題は、それが実際には内部の要求であるという事実に関連しています。そのため、送信するヘッダーは$_SERVER環境情報配列に入力されていません。$this->request->headers()代わりに内部に保管されます。

ajaxチェックは、次のように$_SERVERの内容に基づいて行われます。

if (isset($_SERVER['HTTP_X_REQUESTED_WITH']))
{
    // Typically used to denote AJAX requests
    $requested_with = $_SERVER['HTTP_X_REQUESTED_WITH'];
}

チェックを含まない唯一の解決策は、is_internal()このリクエストを外部リクエストにすることです。これを行うには、プロトコル(http://)と完全なドメイン名(基本的には完全なアドレス)を含むようにリクエストURLを設定する必要があります。次に、リクエストは$ _SERVER配列に新しいヘッダーを入力しis_ajax()、通過させる必要があります。

于 2013-02-12T12:58:20.677 に答える