【发布时间】:2016-06-07 21:50:05
【问题描述】:
我有这样的表格:
<form action="process.php" method="post">
<input type="text" name="input" />
<button type="submit">Submit</button>
</form>
我有一个这样的 Ajax 脚本:
$("button").click(function(event) {
var $ajaxData = {
"input-val" : $("input").val();
}
$.ajax({
type : "POST",
url : "process.php",
data : $ajaxData,
dataType : "json",
encode : true
});
.done(function($data) {
alert($data["stat"]);
});
event.preventDefault();
$("form").unbind();
});
也是一个 PHP 脚本 (process.php) 发送表单数据的地方:
<?php
if(isset($_POST['input-val'])) {
$data['stat'] = 'success';
echo json_encode($data);
}
?>
一切都正确并设置好了,但是,如果我想阻止用户查看或(手动)进入“process.php”页面,我会添加一个重定向功能:
<?php
if(isset($_POST['input-val'])) {
$data['stat'] = 'success';
echo json_encode($data);
}
header('Location: index.php');
?>
这使得 Ajax 的请求自动失败。 如何阻止用户访问或查看 PHP 脚本?
正如我所说,"event.preventDefault();" 正在阻止 Ajax 将用户发送到 PHP 脚本,但用户可以自己去那里。
【问题讨论】:
-
您可以有条件地重定向(或只是终止脚本),前提是发布的值不存在。但考虑到用户可以将他们自己的数据发布到您的 PHP 脚本中。另请参阅How to tell if a page is being called via Ajax, or on it's own。
-
您可以将标题放在
else语句中:if(isset(...)){ /*do something*/ } else { header('...'); } -
您的
var $ajaxDatadefn 中是否缺少等号? -
@gibberish 是的,那是我在这里写问题的时候:|
-
别担心,只是想指出这一点。希望您的问题现在得到解决。
标签: javascript php jquery html ajax