Javascript 使用Ajax从PHP返回对Jquery的响应
我正在提交使用Jquery/AJAX和PHP保存在MySQL数据库中的信息。 这就是我到目前为止所做的:Javascript 使用Ajax从PHP返回对Jquery的响应,javascript,php,jquery,mysql,ajax,Javascript,Php,Jquery,Mysql,Ajax,我正在提交使用Jquery/AJAX和PHP保存在MySQL数据库中的信息。 这就是我到目前为止所做的: function Addinfo() { var ew = document.getElementById("ew").value; var mw = document.getElementById("mw").value; var dataString = 'ew1=' + ew + '&mw=' + mw; if (ew == '' || mw =
function Addinfo() {
var ew = document.getElementById("ew").value;
var mw = document.getElementById("mw").value;
var dataString = 'ew1=' + ew + '&mw=' + mw;
if (ew == '' || mw == '') {
alert("Please Fill All Fields");
} else {
$.ajax({
type : "POST",
url : "ajaxadd.php",
data : dataString,
dataType : 'text',
cache : false,
})
.done(function (data) {
$('#message1').html(data);
})
}
return false;
}
和我的PHP代码:
<?php
$ew2 = $_POST['ew1'];
$mw2 = $_POST['mw1'];
$connection = mysql_connect("localhost", "root", "");
$db = mysql_select_db("tp", $connection);
if (isset($_POST['ew1'])) {
$query = mysql_query("insert into table(ew, mw) values ('$ew2', '$mw2')");
$addresult = mysql_query("SELECT * FROM `table` WHERE `ew` = '" . $_POST['ew1'] . "' ORDER BY `id` DESC LIMIT 1");
$aircraft = mysql_fetch_assoc($addresult);
echo $aircraft;
}
mysql_close($connection); // Connection Closed
?>
您应该如下修改php代码,而不是直接返回mysql\u fetch\u assoc,因为它只返回SQL结果的第一行
<?php
$ew2 = $_POST['ew1'];
$mw2 = $_POST['mw1'];
$connection = mysql_connect("localhost", "root", "");
$db = mysql_select_db("tp", $connection);
if (isset($_POST['ew1']))
{
$result = array();
$query = mysql_query("insert into table(ew, mw) values ('$ew2', '$mw2')");
$addresult = mysql_query("SELECT * FROM `table` WHERE `ew` = '" . $_POST['ew1'] . "' ORDER BY `id` DESC LIMIT 1");
while($aircraft = mysql_fetch_assoc($addresult))
{
$result[] = $aircraft;
}
#echo $aircraft; // wait until whole result is collected
echo json_encode($result);
}
mysql_close($connection); // Connection Closed
?>
此外,建议您可以检查$connection和$db以成功初始化数据库连接和数据库选择,并再次建议您的php代码应使用mysqli扩展,而不是不推荐使用的mysql扩展。您可以用mysqli替换调用方法的mysql部分。另外@RakhalImming的建议对代码的安全性也很好。您应该按照下面的方式修改php代码,而不是直接返回mysql\u fetch\u assoc,因为它只返回SQL结果的第一行
<?php
$ew2 = $_POST['ew1'];
$mw2 = $_POST['mw1'];
$connection = mysql_connect("localhost", "root", "");
$db = mysql_select_db("tp", $connection);
if (isset($_POST['ew1']))
{
$result = array();
$query = mysql_query("insert into table(ew, mw) values ('$ew2', '$mw2')");
$addresult = mysql_query("SELECT * FROM `table` WHERE `ew` = '" . $_POST['ew1'] . "' ORDER BY `id` DESC LIMIT 1");
while($aircraft = mysql_fetch_assoc($addresult))
{
$result[] = $aircraft;
}
#echo $aircraft; // wait until whole result is collected
echo json_encode($result);
}
mysql_close($connection); // Connection Closed
?>
此外,建议您可以检查$connection和$db以成功初始化数据库连接和数据库选择,并再次建议您的php代码应使用mysqli扩展,而不是不推荐使用的mysql扩展。您可以用mysqli替换调用方法的mysql部分。另外@RakhalImming的建议对代码的安全性也很有好处。在PHP代码的末尾
echo$aircraft
将其更改为echo json\u encode($aircraft)代码>和您提到的AJAX功能
cache:false
includesuccess:function(response){alert response;}
它将在AJAX函数中为您的飞机提供变量值。
祝你好运 在PHP代码的末尾
echo$aircraft
将其更改为echo json\u encode($aircraft)代码>和您提到的AJAX功能
cache:false
includesuccess:function(response){alert response;}
它将在AJAX函数中为您的飞机提供变量值。
祝你好运 Jquery:(main.js文件)
$(文档).ready(函数(){
$('.ajaxform')。关于('submit',函数(e){
e、 预防默认值();
$.ajax({
//把你的表格交给邮局
类型:$(this.attr('method'),
//将动作属性的值设为ajaxadd.php
url:$(this.attr('action'),
数据:$(this).serialize(),
数据类型:“json”,
cache:false,
})
.成功(功能(响应){
//删除所有错误
$('input').removeClass('error').next('errormessage').html('');
//如果没有错误并且有结果
如果(!response.errors&&response.result){
//成功
//循环遍历结果并在message1 div中追加值
$.each(response.result、函数(索引、值){
$(“#message1”).append(index+”:“+value+”
);
});
}否则{
//将错误追加到表单中
$.each(response.errors、函数(索引、值){
//添加错误类
$('input[name*='+index+']')。addClass('error')。在(''+value+'')之后
});
}
});
});
});
PHP(ajaxadd.PHP文件)
HTML:
<!doctype html>
<html class="no-js" lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>Ajax form submit</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<form class="ajaxform" action="ajaxadd.php" method="POST">
<input type="text" name="ew1" />
<input type="text" name="mw" />
<button type="submit">Submit via ajax</button>
</form>
<div id="message1"></div>
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.12.0.min.js"><\/script>')</script>
<script src="main.js"></script>
</body>
</html>
Ajax表单提交
通过ajax提交
window.jQuery | | document.write(“”)
Jquery:(main.js文件)
$(文档).ready(函数(){
$('.ajaxform')。关于('submit',函数(e){
e、 预防默认值();
$.ajax({
//把你的表格交给邮局
类型:$(this.attr('method'),
//将动作属性的值设为ajaxadd.php
url:$(this.attr('action'),
数据:$(this).serialize(),
数据类型:“json”,
cache:false,
})
.成功(功能(响应){
//删除所有错误
$('input').removeClass('error').next('errormessage').html('');
//如果没有错误并且有结果
如果(!response.errors&&response.result){
//成功
//循环遍历结果并在message1 div中追加值
$.each(response.result、函数(索引、值){
$(“#message1”).append(index+”:“+value+”
);
});
}否则{
//将错误追加到表单中
$.each(response.errors、函数(索引、值){
//添加错误类
$('input[name*='+index+']')。addClass('error')。在(''+value+'')之后
});
}
});
});
});
PHP(ajaxadd.PHP文件)
HTML:
<!doctype html>
<html class="no-js" lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>Ajax form submit</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<form class="ajaxform" action="ajaxadd.php" method="POST">
<input type="text" name="ew1" />
<input type="text" name="mw" />
<button type="submit">Submit via ajax</button>
</form>
<div id="message1"></div>
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.12.0.min.js"><\/script>')</script>
<script src="main.js"></script>
</body>
</html>
Ajax表单提交
通过ajax提交
window.jQuery | | document.write(“”)
$aircraft
将是一个数组,您使用的是echo
而不是print\r()
。尝试打印print_r()代码>@AnkiiG谢谢。我刚才试过了,但仍然无法得到响应。与其打印,不如只使用带有echo的简单成功消息。您应该为SQL使用准备好的语句。正如您现在的代码所示,您对SQL注入非常开放attacks@RoryMcCrossan我明白了,我是一个完全的初学者,所以我完全忽略了任何安全问题。谢谢,我将在稍后阶段进行研究。$aircraft
将是一个数组,您使用的是echo
而不是print\r()
。尝试打印print_r()代码>@AnkiiG谢谢。我刚才试过了,但还是没有得到回复。与其打印,不如只使用带有echo的简单成功消息。你呢
<?php
// assign your post value
$inputvalues = $_POST;
// assign result vars
$errors = false;
$returnResult = false;
$mysqli = new mysqli('host', "db_name", "password", "database");
/* check connection */
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
// escape your values
foreach ($inputvalues as $key => $value) {
if(isset($value) && !empty($value)) {
$inputvalues[$key] = htmlspecialchars( $mysqli->real_escape_string( $value ) );
} else {
$errors[$key] = 'The field '.$key.' is empty';
}
}
if( !$errors ) {
// insert your query
$mysqli->query("
INSERT INTO `table`(`ew`, `mw`)
values ('".$inputvalues['ew1']."', '".$inputvalues['mw']."')
");
// select your query
// this is for only one row result
$addresult = "
SELECT *
FROM `table`
WHERE `ew` = '".$inputvalues['ew1']."'
ORDER BY `id` DESC
LIMIT 1
";
if( $result = $mysqli->query($addresult) ) {
// collect results
while($row = $result->fetch_assoc())
{
// assign to new array
// make returnResult an array for multiple results
$returnResult = $row;
}
}
}
// close connection
mysqli_close($mysqli);
// print result for ajax request
echo json_encode(['result' => $returnResult, 'errors' => $errors]);
exit;
?>
<!doctype html>
<html class="no-js" lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>Ajax form submit</title>
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body>
<form class="ajaxform" action="ajaxadd.php" method="POST">
<input type="text" name="ew1" />
<input type="text" name="mw" />
<button type="submit">Submit via ajax</button>
</form>
<div id="message1"></div>
<script src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<script>window.jQuery || document.write('<script src="js/vendor/jquery-1.12.0.min.js"><\/script>')</script>
<script src="main.js"></script>
</body>
</html>