假设我有一个我想提交的表单。我已经建立了它的形式是action=""
。因此,我可以通过if(isset($_POST['something']))
示例表单。php(代码未检查,只是为了说明点):
<?php
$result = '';
if (isset($_POST['something']) {
$sql = 'SELECT * FROM aTable WHERE Name = :name';
$stmt = $db->prepare($sql);
$stmt->execute(array(':name' => $_POST['something']);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
?>
<form action="" method="post">
<input type="text" name="something" />
<input type="submit" value="post" />
</form>
<div id="result">
<pre>
<?php echo $result; ?>
</pre>
</div>
如果用户启用了js,现在我希望用jquery/js处理表单。
我知道该怎么做。然而,我有一个问题与数据库访问,例如有相同的查询运行在2个php文件。一个在我的原始表单页面,这是利用当js它关闭并返回数据的关联数组。然后我有一个ajaxData.php返回json,但基本上是相同的sql查询。
例子AJAXDATA.php
<?php
$result = '';
if (isset($_POST['something']) {
$sql = 'SELECT * FROM aTable WHERE Name = :name';
$stmt = $db->prepare($sql);
$stmt->execute(array(':name' => $_POST['something']);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($result);
}
?>
在我看来,这是低效的,因为我正在编写相同的代码,相同的数据访问等…两次-一次为form.php,一次为ajaxdata.php.
我应该如何构建我的表单/文件,使ajax使用相同的数据库访问&SQL代码的正常形式提交?
增加onSubmit
事件处理js
enable/disable
<form action="" method="post" onSubmit="return process_ajax();">
<input type="text" name="something" />
<input type="submit" value="post" />
</form>
precess_ajax()
中的返回false,这样表单将不会被提交,如果js
被禁用,表单将被提交。所有的参数必须是相同的,如果形式张贴。在AJAX
中发送一个额外的参数,比如ajaxForm
,如果post是通过表单或AJAX
来测试服务器端
现在是服务器端PHP代码检查额外的参数ajaxForm
,如果它被设置或有您在AJAX
中发送的值发送JSON
响应,否则发送HTML页面。您的代码将看起来像这样
if (isset($_POST['something']){
$sql = 'SELECT * FROM aTable WHERE Name = :name';
$stmt = $db->prepare($sql);
$stmt->execute(array(':name' => $_POST['something']);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
if(isset($_POST['ajaxForm'])){
//send JSON response
}
else{
//show html page here
}
}
?>