我正在开发一个应用程序,我想将一些数据发送到服务器并获得响应。我应该使用以下格式。
{
"userName" :"testuser2@test.com",
"targetUserName":"janagan.h@gmail.com",
"admin":"false",
"privilege": [{ "site":1, "privileges": ["LIVE_FEED","PLAYBACK"] } ]
}
我应该发送的数据由javascript填充,并发送至PHP函数,在其中我使用curl将请求发送至服务器。以下是我用来发送请求的功能。
function baloba_update_user_priviledges(){
if( isset($_SESSION['user']) && isset($_POST['username']) && isset($_POST['is_admin']) && isset($_POST['privArray']) ){
$data = array('userName' => $_SESSION['user'], 'targetUserName' => $_POST['username'], 'privilege' => stripslashes($_POST['privArray']), 'admin' => $_POST['is_admin']);
echo json_encode($data);
$ch = 'https://54.169.242.241:8243/service_management_api/1.0/services/usermanage/assign_privilege';
$responseData = baloba_api_requset($data ,$ch);
extract($responseData);
if($status == 'SUCCESS'){
echo json_encode(array('status' => 'SUCCESS', 'message' => $message ),TRUE);
die();
}
}
}
我使用
echo
来查看设置为$data
数组的内容。以下是。{"userName":"testuser2@test.com","targetUserName":"testuser1@test.com","privilege":"[{\"site\":\"a0626000000HnwdAAC\",\"privileges\":[\"LIVE_FEED\",\"PLAYBACK\"]}]","admin":"false"}
当我将此数组发送到服务器时,它返回以下错误。
HTTP Status 400 - org.codehaus.jackson.map.JsonMappingException: Can not deserialize instance of java.util.List out of VALUE_STRING token
at [Source: org.apache.catalina.connector.CoyoteInputStream@5ba88001; line: 1, column: 71]
用于生成数据的javascript如下。
function saveUserPriviledges(username,privArray){
return $.ajax({
type : 'POST',
url : '/wordpress/wp-admin/admin-ajax.php',
data : { action: "baloba_update_user_priviledges", 'username' : username, 'is_admin' : false , 'privArray' : JSON.stringify(privArray) },
});
}
function saveUserPriviledgeHandler(username,privArray){
$.when(saveUserPriviledges(username,privArray)).then(function(response){
console.log(JSON.parse(response));
})
}
function priviledgeObjCreator(siteId,privArray){
return { 'site':siteId , 'privileges':privArray }
}
$(document).on('click','.save-priv-changes',function(){
var privObjArray = [];
var priv = [];
var user = $('#userPriv').data('priv-current-user')
$('#userPriv .tab-pane').each(function(e,tab){
$(tab).find('.cmn-toggle:checked').each(function(i,el){
priv.push($(el).attr('id').replace('cmn-toggle-',''));
})
privObjArray.push(priviledgeObjCreator(tab.id.replace('user-priv-',''),priv));
})
saveUserPriviledges(user,privObjArray)
})
我在这里做错什么了!我也在php中使用了
stripslashes
函数。但是我无法生成必要的请求字符串。如何以相同格式发出请求?我了解,当我发送正确的请求格式时,它是成功的,并且在Java代码中没有错误,因为该错误在Java端。 最佳答案
您应该先去除斜线,然后使用html_entity_decode
,这会删除POST
中的所有编码,然后将json字符串解码为原始数组。以下是一个示例。json_decode(html_entity_decode(stripslashes($_POST['privArray'])))