所以我之前在这里问了一个类似的问题并得到了一个有效的答案,然而,在我的初学者项目和ajax介绍进展之后,我遇到了另一个问题。在重新加载页面之后,似乎AJAX调用没有成功。我在向表单添加更多文本字段之前注意到了这个问题,但我无法想象它是如何相关的。稍后的查询依赖于表单是否已成功提交,但我不想让用户刷新页面,只是为了将数据实际推送到数据库。有什么建议吗?
<form action="call.php" method="post">
<input class="oomText" type="text" name="accountName" placeholder="Account Name"><br>
<h2 class="oomHead2">Email Notifcations For Phone Calls</h2>
<input class="oomText" type="text" name="accountEmailOne" placeholder="Email Recipient 1*"><br>
<input class="oomText" type="text" name="accountEmailTwo" placeholder="Email Recipient 2*"><br>
<input class="oomText" type="text" name="accountEmailThree" placeholder="Email Recipient 3*"><br>
<h2 class="oomHead2">Text Notifcations For Phone Calls</h2>
<input class="oomText" type="text" name="accountTextOne" placeholder="Text Recipient 1*"><br>
<input class="oomText" type="text" name="accountTextTwo" placeholder="Text Recipient 2*"><br>
<input class="oomText" type="text" name="accountTextThree" placeholder="Text Recipient 3*"><br>
<small>*Fields are <b>not</b> required to be filled out</small><br>
<input class="oomButton submit" type="submit" name="submit" value="submit">
<script>
$(document).ready(function(){
$('.oomButton.submit').click(function(){
var clickBtnValue = $(this).val();
var ajaxurl = 'http://clients.oomdo.com/provision/ajax.php',
data = {'action': clickBtnValue};
$.post(ajaxurl, data, function (response) {
alert("Account Created");
});
});
});
</script>
</form>
..稍后在php文件中
if ($_SESSION['submitted'] == true){
// do something
}
ajax.php
<?php
session_start();
if (isset($_POST['action'])) {
switch ($_POST['action']) {
case 'submit':
submit();
echo 'Hurrah';
}
}
function submit() {
$_SESSION['submitted'] = true;
}
?>
答案 0 :(得分:1)
我认为您已经忘记了AJAX是异步的,这意味着直到稍后才会发生这种情况。
因此,在您的示例中,您已完成AJAX调用,然后检查了您的会话,然后调用完成了其功能(由于发送的数据量较大,所以需要更长的时间)。这就是它在刷新后看到新值的原因。
这里有3个选项:
//do something
语句包含在success
函数中。代码示例:
$.post(ajaxurl, data, function (response) {
alert("Account Created");
if ($_SESSION['submitted'] == true){
// do something
}
});
success
函数的末尾调用该函数。代码示例:
function sessionCheck(){
if ($_SESSION['submitted'] == true){
// do something
}
}
....
$.post(ajaxurl, data, function (response) {
alert("Account Created");
sessionCheck();
});
$(document)
.ajaxsuccess(function)
提供帮助。每次完成ajax调用时,都会触发此操作。 请注意,多个此类实例可能会覆盖它们 在这种情况下,您必须为每个.php输出添加一个标识会话变量。代码示例
$(document).ajaxSuccess(function() {
if ($_SESSION['submitted'] == true){
// do something
//then find a way to remove $_SESSION['submitted']
// maybe using AJAX as well.
}
//else if ($_SESSION['somethingElse'] == true)
});