亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何為 JQuery 和 Codeigniter 4 啟用或允許 Access-Control-

如何為 JQuery 和 Codeigniter 4 啟用或允許 Access-Control-

PHP
泛舟湖上清波郎朗 2024-01-19 14:56:43
我正在構建一個 API 來激活和驗證 PHP 腳本的活動安裝,但我得到了“從源 'http://domain.te/requests/verify' 訪問 XMLHttpRequest at 'http://api.domain.te/requests/verify'”。 te'已被 CORS 策略阻止:請求的資源上不存在“Access-Control-Allow-Origin”標頭”控制臺上出現錯誤。這是我的 jQuery 代碼:function verify() {     $.post(url+"requests/verify", {        domain: domain    }, function(data) {        if (data.success === true) {            return true;        }    });    return false;}我已經閱讀了類似的問題并嘗試了所有建議,但似乎沒有一個有效。在我的 PHP 代碼中,我有:    public function verify()    {            $data['success'] = false;        $data['status']  = 'error';        $data['message'] = 'An error occurred';          if ($this->actives_m->check($this->request->getPost("domain")??""))        {             $data['success'] = true;            $data['status']  = 'success';            $data['message'] = 'Product is Active!';        }        else        {            $data['message'] = 'Product is Inactive!';        }        $this->response->setHeader('Access-Control-Allow-Origin', '*');        $this->response->setHeader('Access-Control-Allow-Methods', 'GET, POST');        return $this->response->setJSON($data);    }我也嘗試在腳本的開頭設置標題,<?php但仍然不起作用。我還嘗試了內置的 PHPheader()函數,如下所示:header('Access-Control-Allow-Origin: *');header('Access-Control-Allow-Methods: GET, POST');我什至修改了我的 JS 看起來像:function verify() {     $.ajax({        url: url+"requests/verify",         type: "POST",        dataType: "JSON",        data: {domain: domain},         crossDomain: true,        success: function(data) {            if (data.success === true) {                return true;            }        }    });    return false;}到目前為止似乎沒有任何效果,我應該從這里去哪里?更新: 我意識到如果我使用純 Javascript,例如:    const xhr = new XMLHttpRequest();             xhr.open('GET', url+"requests/verify");    xhr.onreadystatechange = function(data) {        if (data.success === true) {            return true;        }    }    xhr.send();它按預期工作,但我必須使用 jQuery 來保持我的代碼統一,并供將來參考。
查看完整描述

2 回答

?
臨摹微笑

TA貢獻1982條經驗 獲得超2個贊

每當出現跨域問題時,都會有兩條路由受到影響。假設在您的示例中,您有對“http://api.domain.te/requests/verify”的 GET 請求,因此在使用 GET 請求訪問服務器之前,它將使用 OPTIONS 請求訪問相同的 url。這將驗證您的服務器是否允許跨源請求的 API。


因此,在 CI4 路由中,您必須定義相同的 URL 或包含通配符才能啟用跨源請求。


這里,以下示例是通配符請求。


$routes->options('(:any)', 'Controller/options');

在這里,該路由與具有 OPTIONS 方法的任何路由匹配,并且有一個名為 Options 的方法來處理它。


該選項方法可以定義如下:


public function options($any)

    {

        return $this->response->setHeader('Access-Control-Allow-Origin', '*') //for allow any domain, insecure

            ->setHeader('Access-Control-Allow-Headers', '*') //for allow any headers, insecure

            ->setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, DELETE') //method allowed

            ->setStatusCode(200); //status code

    }

這個方法本質上是讓瀏覽器知道請求是允許跨源的,狀態方法有GET、POST、PUT和DELETE等。


瀏覽器點擊此請求后,它將被定向到您的請求,該請求也應該啟用跨源,如下所示:


$this->response->setContentType('application/json')->setJSON($response)->send()->setHeader('Access-Control-Allow-Origin', '*');

參考:https://carminemilieni.it/2019/09/19/resolve-cors-and-corb-in-codeigniter-4/


查看完整回答
反對 回復 2024-01-19
?
呼如林

TA貢獻1798條經驗 獲得超3個贊

正如您已經所做的那樣,必須從接收服務器端訪問 CORS,因此我將.htaccess中的標頭放入Apache 站點中(如果您使用不同的服務器,請檢查如何執行此操作):

Header set Access-Control-Allow-Origin "*" (在你的情況下,如果可以是多個未知域,它應該是 *)

Header set Access-Control-Allow-Headers "Origin, X-Requested-With, Content-Type, Accept"  (或者如果你也想要方法)

該標頭的信息和選項: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Origin

您可以使用curl檢查您發送的標頭,它們是否出現? curl -I http://api.domain.te/requests/verify


查看完整回答
反對 回復 2024-01-19
  • 2 回答
  • 0 關注
  • 189 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號