做了個增刪改查的表,新增的資料有多條,我現在都是在URL中以 ? 後加參數的形式傳給php,然後,php用$_GET['']接收傳過來的參數。這是可以實作新增資料的方法,我想問的是,如果新增資料特別多的情況下,php怎麼接收解析傳過來的參數呢?
下面是我的程式碼?
php:
//新增方法
function add_row(){
/*获取从客户端传过来的数据*/
$userName = $_GET['user_name'];
$userAge = $_GET['user_age'];
$userSex = $_GET['user_sex'];
$sql = "INSERT INTO t_users (user_name,user_age,user_sex) VALUES ('$userName','$userAge','$userSex')";
if(query_sql($sql)){
echo "ok!";
}else{
echo "新增成功!";
}
}
function query_sql(){
$mysqli = new mysqli("127.0.0.1", "root", "root", "crud");
$sqls = func_get_args();
foreach($sqls as $s){
$query = $mysqli->query($s);
}
$mysqli->close();
return $query;
}
js:
$(function() {
$('#save').click(function(){
addData();
});
});
function addData(){
var userName = $('#userName').val();
var userAge = $("#userAge").val();
var userSex = $('#user-sex').val() == '0' ? '男' : '女';
var addUrl = "./php/data.php?action=add_row&user_name=" + userName + "&user_age=" + userAge + "&user_sex=" + userSex;
$.ajax({
type:"post",
url:addUrl,
dataType:'json',
contentType:'application/json;charset=utf-8',
success:function(data){
console.log("success");
},
error:function(data){
console.log("data");
//添加成功后隐蒧modal框并重新加载页面
setTimeout(function(){
$('#exampleModal').modal('hide');
},500);
setTimeout(function(){
//新增成功后,重新加载数据
searchData();
},700);
}
});
}
上面寫的可能不太明白,我想要表達的意思是,如果php的程式碼不變,變的僅是js新增這個方法中的資料組織,如果有多條資料需要新增,我把這多條資料組織為一個物件並把這個物件給解析為一個字串傳給php。那麼這個php如何解析資料呢?
function addData(){
var userName = $('#userName').val();
var userAge = $("#userAge").val();
var userSex = $('#user-sex').val() == '0' ? '男' : '女';
/*var addUrl = "./php/data.php?action=add_row&user_name=" + userName + "&user_age=" + userAge + "&user_sex=" + userSex;*/
var addUrl = "./php/data.php?action=add_row";
var addData = {
'user_name':userName,
'user_age':userAge,
'user_sex':userSex
};
var jsonData = JSON.stringify(addData);
$.ajax({
type:"post",
url:addUrl,
data:jsonData,//传给php
dataType:'json',
contentType:'application/json;charset=utf-8',
success:function(data){
console.log("success");
},
error:function(data){
console.log("data");
//添加成功后隐蒧modal框并重新加载页面
setTimeout(function(){
$('#exampleModal').modal('hide');
},500);
setTimeout(function(){
searchData();
},700);
}
});
}
求大俠解答一下,非常感謝!
黄舟2017-05-16 13:01:35
新增操作做好用POST方法,ajax發送json(data:{a:'',b:'',c:''})數據,php接收到後 jsondecode($_POST['data'])
phpcn_u15822017-05-16 13:01:35
將所有的參數放在一個json數字裡面傳遞到後台:{'username': xxx, 'age': xxx}
,按照你程式碼的註解和邏輯那些程式碼應該寫在success裡面而不是error裡面
PHP中文网2017-05-16 13:01:35
我聽不懂你說什麼,ajax接收完,就直接回了,而你默認是dataType:'json',也就是說php裡面回傳的只要不是json格式的數據,就會報錯。你自己看下你上面 //echo "新增成功!";這就直接讓你ajax報錯了。
if(query_sql($sql)){
//echo "ok!";
$r['code']=0;
$r['msg']='ok!';
}else{
//echo "新增成功!";
$r['code']=1;
$r['msg']='新增成功!';
}
exit(json_encode($r));
PHPz2017-05-16 13:01:35
success的條件是 (xmlHttp.readyState == 4) && (xmlHttp.status == 200)
你看看你要求的位址回傳的狀態碼是200嗎?
如果參數很多的話你可以直接將$_GET賦值給一個變數就行了,因為$_GET就是一個陣列。
漂亮男人2017-05-16 13:01:35
1.ajax提交方式是用teyp:"post",但php接收的參數是$_GET
2.ajax接收的資料格式dataType:'json',但php回傳的結果是text。
3.ajax的請求內容格式contentType:'application/json;charset=utf-8',請求的資料應當為json字串,後台如果用php接收,可以用$data = file_get_contents("php://input "); json_decode($data, true),即為請求參數.(HttpRequest中常見的四種ContentType(轉))
4.sql要做防注入處理