我一直在努力创建一个简单的网站,我无法完全理解这里所说的一些事情,其中一些事情也与我的情况无关。
该网站有一个包含3个输入框,一个按钮和一个列表的表单。单击提交按钮后,信息将通过单独的PHP文件提交到MySQL数据库。一旦信息在数据库中成功发送和更新,我应该将列表(它在div中)更新。到目前为止,我已经使它与异步一起工作:假,但我不应该,因为社会。
如果没有这个(坏)选项,列表在提交信息后就不会加载,因为(我假设)该方法是在它之后执行的,因为它不会等待它完成。
我在“成功:”中应该做些什么才能让它发挥作用? (或者,我在$ .ajax子句中读到了关于.done()的内容,但我不确定如何使其工作。)
回调应该是什么样的?我以前从来没有这样做过,因为每个案例都略有不同,我可能会对这里的结果感到迷失方向。
function save() {
var name = document.getElementById('name');
var email = document.getElementById('email');
var telephone = document.getElementById('telephone');
$.ajax({
url: "save.php",
method: "POST",
data: { name: name.value, email: email.value, telephone: telephone.value },
success: $("List").load(" List")
});
}
先谢谢你,如果我需要包含更多信息,请不要犹豫。
答案 0 :(得分:1)
从此评论中
据我所知
success
函数将在success
上调用你应该使用complete
,一个函数在请求完成时被调用(在success
之后error
回调被执行)。不是你想要的吗? - Muhammad Omer Aslam
我设法解决了这个问题,只需将$.load
子句从success:
选项移到complete:
选项即可。 (我认为他们称之为选项)
我还没有管理错误处理,即使在我的脑海中,但至少它可以正常工作。
谢谢!
(赢了,直到2天才让我回答)
答案 1 :(得分:0)
我将向您展示我在项目中使用的一部分解决方案。我不能说它是最佳或最佳实践,但它适用于我并且可以为您工作:
PHP:
function doLoadMails(){
//initialize empty variable
$mails;
$conn = new mysqli($_POST['ip'], $_POST['login'], $_POST['pass'], $_POST['db']);
// Check connection
if ($conn->connect_error) {
die("");
}
//some select, insert, whatever
$sql = "SELECT ... ... ... ";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row, j is counter for rows
$j =0;
while($row_a = $result->fetch_assoc()) {
//for each row, fill array
$mails[$j][0] = $row_a["name"] ;
$mails[$j][1] = $row_a["mail"] ;
$mails[$j][2] = $row_a["language"] ;
$j++;
}
}
//if $mails has results (we added something into it)
if(isset($mails)){
echo json_encode($mails);/return json*/ }
else{
//some error message you can handle in JS
echo"[null]";}
}
然后在JS
function doLoadMails() {
$.ajax({
data: { /*pass parameters*/ },
type: "post",
url: "dataFunnel.php",
success: function(data) { /*data is a dummy variable for everything your PHP echoes/returns*/
console.log(data); //you can check what you get
if (data != "[null]") { /*some error handling ..., in my case if it matches what I have declared as error state in PHP - !(isset($mails))*/ }
}
});
请记住,您可以直接回显/返回SQL请求的结果,并以更原始的格式将其放入JS中,并在此处理进一步的处理。
在您的解决方案中,您可能需要回显INSERT请求的返回码。
答案 2 :(得分:0)
我首先在一个函数内创建一个AJAX调用,该函数在页面加载时运行以填充列表。
window.onload = populatelist();
function populatelist() {
$.ajax({
type: "POST",
url: "list.php",
data: {function: 'populate'},
success: function(data) { $("#list").html("data"); }
});
}
注意:#list
是指<div id="list>
,您的列表应该在此内。
然后我会在另一个函数中进行另一个AJAX调用,该函数在提交表单时更新数据库。成功后,它将运行populatelist
函数。
function save() {
var name = document.getElementById('name');
var email = document.getElementById('email');
var telephone = document.getElementById('telephone');
$.ajax({
type: "POST",
url: "list.php",
data: {function: 'update', name: name.value, email: email.value, telephone: telephone.value },
success: function() { populatelist(); }
});
}
list.php应如下所示:
<?php
if($_POST['function'] == "populate") {
// your code to get the content from the database and put it in a list
}
if($_POST['function'] == "update") {
// your code to update the database
}
?>