解決js調用接口跨域名報錯問題


解決js調用接口跨域名報錯問題

前言:自己是一個新手,最近想寫一個自己的網站來讓自己玩一玩,因為是頭一次寫,所以有很多過程都不是很了解,很多功能的實現也不是很熟悉,都需要在網上查閱資料來進行完成。
這篇文章是自己在寫調用一個接口時所遇到的問題。

問題描述

自己在調用一個接口的時候,使用的是js,用ajax去向接口鏈接提交請求來進行調用的,但是在代碼寫好以后調用的時候,頁面一直沒有反應,后來查看控制台發現報錯了,如下圖所示,經過查閱資料發現這是跨域訪問的原因。

解決方法

在網上查了好多方法,想通過js實現,一直沒有實現出來,后來又使用php去進行實現,功能能使用出來以后還是有一些小遺憾,於是想着在進一步的優化……
最后的思路是通過創建一個新php文件來獲取接口內容作為后台,在使用ajax將數據傳輸到前端頁面,

獲取接口api

首先是要有需要使用的api接口,這個可以直接在博客園或者百度上面搜索到的。

后台使用php等語言調用接口

后台使用php去調用接口,將數據獲取到自己的服務器上,然后在使用ajax從自己的中轉接口上獲取數據,這樣就解決了跨域的問題,就是需要去多創建一個文件。

代碼記錄

自己寫的是中英文翻譯的功能。

html代碼

<form>
    <textarea id="inputOriginal" placeholder="請輸入你要翻譯的文字或網址" name="inputOriginal"></textarea>
    <div id="transTarget">
        <p><span></span></p>
    </div>
    <input type="button" value="翻譯" id="fy">
</form>

javascript代碼

$("#fy").on('click',function() {
    var input_Original = $('#inputOriginal').val();
    // alert(input_Original);
    $.getJSON('https://api.xingzhige.com/API/ydfy/api.php?msg=' + input_Original, function (res) {
        // alert(res.data);
        $("#transTarget p span").text(res.data);
        })
    })
})

php代碼

<?php
    header('Content-Type:application/json; charset=utf-8');
    $inputOriginal = $_GET['inputOriginal'];

    $url = "https://api.xingzhige.com/API/ydfy/api.php?msg=$inputOriginal";
    function curl_get_https($url){
        $curl = curl_init(); // 啟動一個CURL會話
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳過證書檢查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, true);  // 從證書中檢查SSL加密算法是否存在
        $tmpInfo = curl_exec($curl);     //返回api的json對象
        //關閉URL請求
        curl_close($curl);
        return $tmpInfo;    //返回執行結果
    }

    $res = curl_get_https($url);
    $obj = json_decode($res,true);
    // $a = $obj->$data;
    
    
    function curl_post_https($url,$data){ // 模擬提交數據函數
        $curl = curl_init(); // 啟動一個CURL會話
        curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證證書來源的檢查
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1); // 從證書中檢查SSL加密算法是否存在
        curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模擬用戶使用的瀏覽器
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動設置Referer
        curl_setopt($curl, CURLOPT_POST, 1); // 發送一個常規的Post請求
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的數據包
        curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設置超時限制防止死循環
        curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header區域內容
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的信息以文件流的形式返回
        $tmpInfo = curl_exec($curl); // 執行操作
        if (curl_errno($curl)) {
            echo 'Errno'.curl_error($curl);//捕抓異常
        }
        curl_close($curl); // 關閉CURL會話
        return $tmpInfo; // 返回數據,json格式
    }


    exit($res);

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM