我只想知道是否可以通过单击没有任何文本输入的表单提交按钮来执行带有ajax的PHP发布请求。说我有一张表格
<form action="connecting.php" id="connect" method="post" enctype="multipart/form-data">
<input type="submit" name="userconnect" id="userconnect" value="connect">
</form>
我想在提交按钮上执行这个php代码块
connecting.php
<?php
require_once ("db.php");
$db = new MyDB();
session_start();
if (isset($_POST['userconnect']))
{
$my_id = htmlspecialchars($_SESSION['log_id'], ENT_QUOTES, 'UTF-8');
$user_id = (int) htmlspecialchars($_SESSION['userid'], ENT_QUOTES, 'UTF-8');
$rand_num = rand();
$hsql =<<<EOF
SELECT COUNT(hash) as count FROM connect WHERE (user_one = '$my_id' AND user_two = '$user_id') OR (user_two = '$my_id' AND user_one = '$user_id');
EOF;
$hret = $db->querySingle($hsql);
if ($hret == 1)
{
echo "<script>alert('You are already connected to this user')</script>";
}
else
{
$usql = $db->prepare("INSERT INTO connect (user_one, user_two, hash) VALUES (:my_id, :user_id, :rand_num)");
$usql->bindValue(':my_id', $my_id, SQLITE3_INTEGER);
$usql->bindValue(':user_id', $user_id, SQLITE3_INTEGER);
$usql->bindValue(':rand_num', $rand_num, SQLITE3_TEXT);
$uret = $usql->execute();
if (!$uret)
{
echo "Error connecting";
}
else
{
echo "Connection Sucessful";
}
}
}
这是我尝试使用的ajax请求
$("#connect").submit(function(e) {
e.preventDefault();
$.ajax({
type: "POST",
url: "connecting.php",
data: $(this).serializeArray(), //the data is an issue cause of no text input in for
dataType: "json",
success: function(response) {
console.log(response);
},
error: function(response) {
}
});
});
这不起作用,因为表单中没有数据要发送ajax,但所有数据都在PHP文件中。我如何用ajax执行php文件。有什么办法吗?
答案 0 :(得分:0)
您不必向PHP脚本发送POST请求以便执行。您可以将普通GET发送到执行PHP脚本的URL,并将您要查找的JSON数据发回给您。这样,您就不必使用post请求发送数据,您仍然可以运行PHP脚本。
编辑* 您可以做的另一件事是添加隐藏的ID字段或一些随机文本,并将POST作为数据发送。你不必对它做任何事情,它可能只是一个时间戳,但它会发送POST请求。这当然是开销,而不是我的编程,但仍然是一个选项。
答案 1 :(得分:0)
是的,有可能......你需要利用点击事件......
例如,如果你有一个像这样的div元素:
<div id='mybutton'>click me</div>
然后你可以使用这样的代码在单击按钮时按字面意思执行任何操作。:
$('#mybutton').on('click',function(){
$.post...
});
奖励信息: 你也可以像这样劫持表单提交事件:
$('#form#myform').on('submit',function(e){
e.preventDefault(); //stop before page is reloaded with post headers
$.post...
});
你实际上并不需要表单事件,你可以只需$ .get到一个php url并返回它生成的html或json。只需查看$ .get()
上的jquery文档