PHP接收前端傳值各種情況整理
服務端代碼:
header("Access-Control-Allow-Origin:*");
var_dump($_POST);
exit;
情況
1) 傳null
$.post("http://xxxxx.xx/index.php", {
"test": null
}, function(data, status) {
console.log(data);
});
結果:
array(1) {
["test"]=>
string(0) ""
}
2) 傳""
代碼:
$.post("http://xxxxx.xx/index.php", {
"test": ""
}, function(data, status) {
console.log(data);
});
結果:
array(1) {
["test"]=>
string(0) ""
}
3) 傳"[]"
$.post("http://xxxxx.xx/index.php", {
"test": "[]"
}, function(data, status) {
console.log(data);
});
結果:
array(1) {
["test"]=>
string(2) "[]"
}
4) 傳[]
$.post("http://xxxxx.xx/index.php", {
"test": []
}, function(data, status) {
console.log(data);
});
結果:
array(0) {
}
5) 傳2個[]
$.post("http://xxxxx.xx/index.php", {
"test": [],
"test2": []
}, function(data, status) {
console.log(data);
});
結果:
array(0) {
}
6) 傳{}
$.post("http://xxxxx.xx/index.php", {
"test": {}
}, function(data, status) {
console.log(data);
});
結果:
array(0) {
}
7) 傳2個{}
$.post("http://xxxxx.xx/index.php", {
"test": {},
"test2": {}
}, function(data, status) {
console.log(data);
});
結果:
array(0) {
}
8) 傳1個{}加1個非空對象
$.post("http://xxxxx.xx/index.php", {
"test": {},
"test2": {"a": 1}
}, function(data, status) {
console.log(data);
});
結果:
array(1) {
["test2"]=>
array(1) {
["a"]=>
string(1) "1"
}
}
9) 傳[{}]
$.post("http://xxxxx.xx/index.php", {
"test": [{}]
}, function(data, status) {
console.log(data);
});
結果:
array(0) {
}
10) 傳[[{}]]
$.post("http://xxxxx.xx/index.php", {
"test": [[{}]]
}, function(data, status) {
console.log(data);
});
結果:
array(0) {
}
11) 傳"nil"
$.post("http://xxxxx.xx/index.php", {
"test": "nil"
}, function(data, status) {
console.log(data);
});
結果:
array(1) {
["test"]=>
string(3) "nil"
}
12) 傳0
$.post("http://xxxxx.xx/index.php", {
"test": 0
}, function(data, status) {
console.log(data);
});
結果:
array(1) {
["test"]=>
string(1) "0"
}
13) 傳"null"
$.post("http://xxxxx.xx/index.php", {
"test": "null"
}, function(data, status) {
console.log(data);
});
結果:
array(1) {
["test"]=>
string(4) "null"
}
用抓包工具發現
- http請求裡面並不會發送"無效的"欄位——[]和{},所以不是PHP丟棄了,而是沒收到;
- 當傳的值是js里的null,會轉換成空字元串,http請求裡面是test=,所以PHP接收到的test是個空字元串;
- http協議不能表示值是什麼類型,所以PHP只能什麼都當做string
總結:
- PHP對於接收到的每一個值,會轉換成字元串變數
- PHP對於接收到的,之所有會接收不到是因為被一系列規則過濾掉了
以上結論是在jQ和PHP7之下驗證的,其他環境不一定保證正確,之後可以試驗使用CURL發送數據試試。
TODO:
- [ ] 用CURL發送POST測試
作者:SSSWIIILLL
原文:https://my.oschina.net/wiiilll/blog/3002507
打開今日頭條,查看更多圖片※開源一個千萬級多組Raft庫-Dragonboat
※資深程序員參加面試因穿著被認為是新手,拿下帽子後,被當場錄取
TAG:程序員小新人學習 |