我有以下输入,即切换返回true,false
@Path("cars")
@Produces(MediaType.APPLICATION_JSON)
public class CarAPIService {
//...
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("save")
public Car save(Car instanceToSave) {
//Implement method
}
}
当我像这样发送
<input id="{{event.id}}" ng-model="event.is_active" type="checkbox" value="true" class="block__input" ng-class="{'input__toggle--active' : event.is_active}">
在服务器中,我收到false和true作为字符串&#39; true&#39;,&#39; false&#39;
如何解决这个问题?
答案 0 :(得分:2)
您可以发送每个&#34;已检查的项目&#34;作为一个字符串(结果为true)并且不发送&#34;未选中的项目&#34; (在服务器端默认为false。)例如:
客户端(js / jquery)
var fd = new FormData();
var foo = $('[name="foo"]').prop('checked');
var bar = $('[name="bar"]').prop('checked');
var is_active = $('[name="is_active"]').prop('checked');
if (foo) fd.append('foo',foo);
if (bar) fd.append('bar', bar);
if (is_active) fd.append('is_active', is_active')
服务器端(php / laravel)
$foobar = new FooBar();
$foobar->foo = $request->foo ? true : false;
$foobar->bar = $request->bar ? true : false;
$foobar->is_active = $request->is_active ? true : false;
上面的三元语句将在php中返回false。
答案 1 :(得分:1)
FormData
将始终以字符串形式发送。解决问题的一种方法是使用JSON。只需在客户端使用JSON.stringify
对您的值进行编码即可。在服务器端,您只需解码值。
<强>客户机侧强>
var fd = new FormData;
var data = {
name: 'john doe',
active: true,
count: 42
};
var prop;
for(prop in data){
fd.append(prop, JSON.stringify(data[prop]));
}
// if you want to upload files, too
fd.append('file', file);
$http({
method: 'post',
url: '/api/upload',
data: fd,
transformRequest: angular.identity,
headers:{ 'Content-Type': undefined }
});
Serverside(PHP,简化)
$data = [];
foreach($_POST as $prop => $value){
$data[$prop] = json_decode($value);
}
// $data contains the correct values now ..
答案 2 :(得分:1)
在客户端上使用JSON.stringify
发送数字和布尔值,然后在bakend上解析
const form = new FormData;
const data = {
name: 'john doe',
active: true,
count: 42
};
form .append('file', file); // send your file here
form .append('fileProps', JSON.stringify(data));
// then send form with POST from angular with using http
答案 3 :(得分:0)
如果您对布尔值有疑问,则需要发送0
或1
。
示例:
let data = new FormData()
data.append('type', 0)
data.append('typeSend', 1)
在许多情况下,服务器将理解这是一个布尔值:false = 0
,true = 1
答案 4 :(得分:0)
我知道这太迟了。但是表单数据不能解释类型数据,例如布尔值,整数等。
最好的方法是将其转换为JSON,并相应地覆盖其中的布尔值的边缘情况。
例如
where foo='foo'
答案 5 :(得分:0)
FormData.append(..)
或FormData.set(..)
始终将值转换为字符串(Blob除外),请参见here:
如果发送的值不同于String或Blob,它将自动转换为String:
formData.append('name', true);
formData.append('name', 74);
formData.append('name', 'John');
formData.getAll('name'); // ["true", "74", "John"]
因此您可以按照https://stackoverflow.com/a/39094808/2311074
中的建议使用json编码/解码但是,如果它只是单个值,并且您知道它必须是布尔值,但将作为字符串发送,则也可以在服务器端将其转换为布尔值:
$is_active = ($this->request->is_active == 'true') ? true : false
答案 6 :(得分:-2)
formData.append('is_active', scope.event.is_active === 'true');
答案 7 :(得分:-2)
这是您的ng-model
:
ng-model="event.is_active"
那么,为什么不使用ng-model="formData.event.is_active"
呢?
然后,在您的脚本文件中,您可以直接将$scope.formData
作为对象发送到服务器。