我需要在我的 wordpress 網站中使用 GET 請求呼叫 REST API。要求是每當我們從搜索表單中搜索任何產品時,PHP curl 函式都應該給出回應。我已經實作的PHP函式如下:
<?php
function callAPI($data)
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://price-api.datayuge.com/api/v1/compare/search?
api_key=API_KEY&product=" . $data . "&page=1",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"content-type: application/json"
) ,
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err)
{
echo "cURL Error #:" . $err;
}
else
{
return $response;
}
}
?>
我是 PHP 和所有這些 Web 開發的新手。我這樣做是因為我很想通過實踐來學習。所以請幫助我在 wordpress 網站搜索表單中實作這個函式呼叫。我也不知道搜索表單在呼叫時如何將 $data 引數(將包含用戶輸入)發送到函式。所以請告訴包括這個引數的方法。還請告訴在wordpress中應該從哪里呼叫這個函式?
我的新實作:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-
scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<p>Search any product</p>
<input id="userInput" type="text" placeholder="Search...">
<button onclick="returnText()">Submit</button>
<scriptsrc="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>
function returnText() {
let input = document.getElementById("userInput").value;
alert(input)
$.ajax({
url: 'https://wattaprice.com/price-compare/', //This is
the current doc
type: "GET",
data: (input),
success: function(data) {
console.log(data);
alert(data);
//or if the data is JSON
}
});
}
</script>
</body>
</html>
<?php
if (isset($_GET['input']))
{
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://price-
api.datayuge.com/api/v1/compare/search?
api_key=API_KEY&product=" . $input .
"&page=1",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"content-type: application/json"
) ,
));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err)
{
echo "cURL Error #:" . $err;
}
else
{
$final_result = json_decode($response, true);
var_dump($final_result);
}
}
?>
uj5u.com熱心網友回復:
您可以撰寫一個 JavaScript onclick 事件以在單擊“搜索”按鈕時獲取搜索欄位的值。然后通過 AJAX 將資料(輸入欄位的值)發送到 BE,并在此基礎上執行您的 curl 請求。
在 BE 中,您可以撰寫一個函式并將其掛鉤到wp_ajax_${action}或wp_ajax_nopriv_${action}將處理此請求并在最后 - 使用wp_send_json發送資料。
這將是最干凈的方法。此外,您應該在 FE 中創建某種型別的指示,表明請求正在執行并且用戶正在等待回應。我建議使用微調器加載程式(這不是強制性的,但它增強了用戶體驗)。
編輯:你錯過了什么?- 很好,你的 JS 正在執行,但你從來沒有將你的函式注冊為 wp_ajax 請求。
如何解決?- 首先要做的是用一個名為get_product_price() 的函式來包裝你的CURL 請求。您的代碼如下所示:
// This function initializes the URL where all AJAX requests in WP are made
function myplugin_ajaxurl() {
echo '<script type="text/javascript">
const ajaxurl = "' . admin_url('admin-ajax.php') . '";
</script>';
}
add_action( 'wp_head', 'myplugin_ajaxurl' );
function get_product_price() {
...your curl code here....
}
add_action( 'wp_ajax_nopriv_get_product_price', 'get_product_price' ); // This lets WP know you want to call this function via AJAX.
然后當您呼叫 AJAX 時,您必須執行以下操作:
$.ajax({
url: ajaxurl,
type: "GET",
data: (input),
...按原樣繼續代碼....
這樣您就可以向您的 BE 發出 AJAX 請求,該請求將使用 curl 從另一個 API 獲取資料。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/494866.html
