【发布时间】:2015-05-03 20:29:14
【问题描述】:
我有一个 php 文件 (todo.php & todo.js),它从用户那里收集一些数据并使用 ajax 将收集到的数据发布到另一个要添加到数据库的 php 文件 (add.php) 中。我的问题是我不想使用 ajax 将数据发布到第二个 php 文件 (add.php)。我该如何改变这个。我已提取代码并显示如下
//todo.js 从 todo.php 调用来验证新的 todoEntry
function addToDo(){
var descField = document.getElementById('nDesc');
var percField = document.getElementById('nPerc');
if( !validateField(descField) ){
alert("Description " + errorMessage);
return;
}
if( !validatePercentField(percField) ){
alert("Percentage " + errorMessage);
return;
}
//use ajax to post new entries to add.php which will add them
ajaxCall(encodeURI('add.php?description=' + descField.value
+ '&percentage=' + percField.value), function(response){
if( response.status == 200 ){
if( response.responseText.toString().indexOf
("success") != -1 ){
//clear values
descField.value = "";
percField.value = "";
//refresh table
fetchToDo();
}
else
alert(response.responseText);
}
});
}
From add.php:
<?php
session_start();
if( !isset($_SESSION['username']) ){
die("Your Session has expired. Please re-login to continue");
}
//get required data
$description = trim(isset($_GET['description']) ? urldecode($_GET
['description']) : "");
$percentage = trim(isset($_GET['percentage']) ? urldecode($_GET
['percentage']) : "");
//validate data
if( empty($description) || empty($percentage) ){
die("All fields are required!");
}
//connect to database
include('connect.php');
//insert data
$stmt = $mysqli->prepare("INSERT INTO todo_entry VALUES (NULL, ?, NOW
(), NOW(), ?, ?)");
$stmt->bind_param("ssi", $_SESSION['username'], $description,
$percentage);
$stmt->execute();
if( $stmt->affected_rows > 0 ){
$stmt->close();
echo "success";
}
else{
echo "An Error Occured: " . $stmt->error;
$stmt->close();
}
//close database
$mysqli->close();
?>
【问题讨论】:
-
创建一个表单给第二页和方法=发布动作。您将在 $_POST 的第二页上获得所有数据。
-
这个逻辑有一个严重的缺陷。确实,您正在谈论您 100% 知道的非常基本的主题。您在谈论的是表单功能。正如@anantkumarsingh 所说的那样。生活比您想象的工作流程更轻松。
-
是的,如果您不想使用表单加载另一个页面,Ajax 是这里唯一的选择。