如何设置可以通过 JavaScript onclick 事件触发的 PHP Curl POST 请求?
Posted
技术标签:
【中文标题】如何设置可以通过 JavaScript onclick 事件触发的 PHP Curl POST 请求?【英文标题】:How to set up a PHP Curl POST request which can trigger via a JavaScript onclick event? 【发布时间】:2022-01-23 20:07:35 【问题描述】:我想在 javascript 中跟踪表单上的提交按钮单击事件并将提交按钮单击事件发送到 curl php 端,并且 curl php 文件中的 url (https://trackcmp.net/event) 将发送我触发并存储到的事件数据库(ActiveCampaign)。
表单由 ActiveCampaign 创建并嵌入到 Wordpress 网站中。
下面是我制作的2个文件,第一个是ajax文件,第二个是PHP文件。
有人可以帮帮我吗?谢谢。
(function($)
$("_form_44__submit").on('click', function ()
// fire the AJAX request on button click
$.ajax(
type: "POST",
url: 'curl.php',
dataType: 'json',
headers: "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",,
data: actid: "actid",
key: "key",
event: "Click_Submit_Button_Event",
visit: ["email"]
,
)
.done(function (response)
console.log(response);
// if you want to do something on success
)
.fail(function (xhr, status, error)
console.log('error');
// if you want to do something on error
);
);
)
<?php
$actid = $_POST['actid'];
$key = $_POST['key'];
$event = $_POST['event'];
$visit = $_POST['visit'];
$url = "https://trackcmp.net/event";
$curl = curl_init(); //open connection /
// changes the cURL session behavior with options POST
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
//curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_POSTFIELDS, array(
'actid' => $actid,
'key' => $key,
'event' => $event,
'visit' => $visit,
));
//execute
$result = curl_exec($curl); //handle $curl_init
if ($result !== false)
$result = json_decode($result);
if ($result->success)
echo 'Success! ';
else
echo 'Error! ';
echo $result->message;
else
echo 'cURL failed to run: ', curl_error($curl);
?>
【问题讨论】:
【参考方案1】:我假设 PHP curl 适合你,并且你有数据来填充 ajax 帖子中的值,所以:
为了让数据到达以 $_POST 形式发布 PHP,您需要像这样发送它,例如 $.ajax 代码:
$.ajax(
type: "post",
url: "curl.php",
data: "actid=actid&key=somekey&event=Click_Submit_Button_Event&visit=email@at.com",
success: function (data)
console.log('Submission was successful.');
console.log(data);
,
error: function (data)
console.log('An error occurred.');
console.log(data);
,
);
看看数据的构建方式:你当然可以这样做:"actid="+actid+"&key="+key+ ... etc
这样您的 PHP 文件将能够读取表单数据。
如果你要打印你的 $_POST,它看起来像:
Array
(
[actid] => actid
[key] => somekey
[event] => Click_Submit_Button_Event
[visit] => email@at.com
)
编辑这是一个完整的版本,带有表单点击和输入:
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
</head>
<html>
<body>
<form id="contactForm1" action="curl.php" method="post">
Actid <input type="text" name="actid" /><br>
Key <input type="text" name="key" /><br>
Event <input type="text" name="event" /><br>
Visit <input type="text" name="visit" /><br>
<input type="submit" />
<!-- Form input fields here (do not forget your name attributes). -->
</form>
</body>
</html>
<script type="text/javascript">
var frm = $('#contactForm1');
frm.submit(function (e)
e.preventDefault();
console.log(frm.serialize()); /*show the data being sent from the form*/
$.ajax(
type: frm.attr('method'),
url: frm.attr('action'),
data: frm.serialize(),
success: function (data)
console.log('Submission was successful.');
console.log(data);
,
error: function (data)
console.log('An error occurred.');
console.log(data);
,
);
);
</script>
为你 PHP 我认为你误认为数组发送数据......你应该尝试这样的事情:curl.php: 发布数据将成为一个 json,我怀疑这是您需要发送到您的端点的内容......它看起来像这样:
"actid":"actid","key":"key","event":"Click_Submit_Button_Event","visit":"someEmail@at.com"
<?php
$post = json_encode($_POST);
print_r($post);
$url = "https://trackcmp.net/event";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
$headers = array();
$headers[] = 'Content-Type: application/json';
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = json_decode(curl_exec($ch),true);
if (curl_errno($ch))
echo 'Error:' . curl_error($ch);
curl_close($ch);
echo '<pre>';
print_r($result);
【讨论】:
您好,非常感谢您的建议。你的建议非常好。但我有一些与我提出的问题有关的问题。实际上,我使用的表单嵌入在 Wordpress 网站 中。 表单类是“_form_44”。因此,我可以请您就如何触发嵌入在 Wordpress 中的表单提出建议吗?谢谢。 提交表单时是否到达了 PHP 文件?你在这个过程中处于什么阶段? 它适用于带有表单点击和输入部分的完整版本。但实际上,表单已经创建并在 Wordpress 网站内实现。但我不知道如何使用 ajax 调用来触发 Wordpress 中的表单。并在用户单击 php 文件 (trackcmp.net/event) 中的 url 时发送跟踪事件(提交)。你有什么解决办法吗?谢谢。以上是关于如何设置可以通过 JavaScript onclick 事件触发的 PHP Curl POST 请求?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法将 require_once() 的范围显式设置为全局?
如何知道是不是通过 require_once() 调用了 php 脚本? [复制]