我在javascript
中使用此功能与服务器php脚本进行通信:
ajax = function( url, ready, json=null, method = 'post') {
var response, request = xhr();
request.open( method, url, true );
request.onreadystatechange = function() {
if( request.readyState == 4 ) {
if( typeof ready == 'function' ){
return ready( request );
} else { return JSON.parse( request.responseText );}
}
}
if(json !== null){
request.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
return request.send( JSON.stringify( json ) );
}else { return request.send( null );}
}
在使用XMLHttpRequest
打开连接后,我创建了post method
。
我还将setRequestHeader
设置为解析JSON: ("Content-Type", "application/json;charset=UTF-8");
,我使用此功能从data
收集html form
:
formToValues = function (id) {
var i, values = {}, form = document.getElementById(id);
//var fields = form.querySelectorAll('input,textarea,select'),
for (i = 0; i < form.length ;i++) {
if( form.elements[i].name !== "" ){
values[form.elements[i].name] = form.elements[i].value;
}
}
return values;
}
ajax('a.php', function(response){
console.log(response);
}, formToValues("regForm") );
这里也是我的html form
:
<form id="regForm" action="javascript:;" method="post" />
<p>
<label for="name">Name</label>
<input type="text" name="name" value="xhr" />
<label for="email">Email:</label>
<input type="email" name="email" value="ro@ew.gq" />
<label for="password">Password:</label>
<input type="password" name="password" value="pass" />
<input type="button" value="Search" />
</p>
现在我在php
脚本中回收数据时遇到了问题:
a.php
:
<?php
var_dump( $GLOBALS );
$ar= array( "a"=>2,"b"=>3, "c"=>json_decode( $_REQUEST['params'] ));
echo json_encode($ar);
?>
似乎php将我从javascrip发出的数据作为字符串并将其存储在HTTP_RAW_POST_DATA
["HTTP_RAW_POST_DATA"]=>
string(51) "{"name":"xhr","email":"ro@ew.gq","password":"pass"}"
"array(7) {
["GLOBALS"]=>
array(7) {
["GLOBALS"]=>
*RECURSION*
["HTTP_RAW_POST_DATA"]=>
string(51) "{"name":"xhr","email":"ro@ew.gq","password":"pass"}"
["_POST"]=>
array(0) {
}
["_GET"]=>
array(0) {
}
["_COOKIE"]=>
array(0) {
}
["_FILES"]=>
array(0) {
}
["_REQUEST"]=>
array(0) {
}
}
现在我可以使用php://input
获取数据不会有问题,但我关注安全问题并且它确实没问题,还有一件事要考虑:从php 5.6.0开始。 $ HTTP_RAW_POST_DATA - 不推荐使用原始POST数据〜所以我该怎么办?
Tkanks
答案 0 :(得分:3)
当请求内容类型为application/json
(仅application/x-www-form-urlencoded
和multipart/form-data
)时,PHP不会填充$ _POST超全局。
建议使用json_decode()
和php://input
。