Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/446.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript FormData将布尔值作为字符串发送到服务器_Javascript_Angularjs_Api_Multipartform Data_Form Data - Fatal编程技术网

Javascript FormData将布尔值作为字符串发送到服务器

Javascript FormData将布尔值作为字符串发送到服务器,javascript,angularjs,api,multipartform-data,form-data,Javascript,Angularjs,Api,Multipartform Data,Form Data,我有以下输入,这是一个切换返回真,假 <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作为字符串'true','false' 如何解决此问题?formData.append('i

我有以下输入,这是一个切换返回真,假

<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作为字符串'true','false'


如何解决此问题?

formData.append('is_active',scope.event.is_active=='true')

这是您的
ng型号

ng model=“event.is\u active”

那么,为什么不使用
ng model=“formData.event.is\u active”


然后,在脚本文件中,您可以直接将
$scope.formData
作为对象发送到服务器。

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 }
});
服务器端(PHP,简化)

您可以将每个“选中项”作为字符串发送(结果为true),而不发送“未选中项”(在服务器端可能默认为false)。例如:

客户端(js/jquery)

服务器端(php/laravel)


上面的三元语句在php中为null时返回false

如果布尔值有问题,则需要发送
0
1

例如:

let data = new FormData()
data.append('type', '0')
data.append('typeSend', '1')

在许多情况下,服务器会理解这是一个布尔值:
false=0
true=1
使用
JSON。在客户端上字符串化
以发送数字和布尔值,然后在后端解析它

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
FormData.append(..)
FormData.set(..)
始终将值转换为字符串(其Blob除外),请参见:

如果发送的值不同于字符串或Blob,则会自动转换为字符串:

因此,您可以按照中的建议使用json编码/解码

但是,如果它只是一个值,并且您知道它必须是布尔值,但将作为字符串发送,那么您也可以在服务器端将其转换为布尔值:

$is_active = ($this->request->is_active == 'true') ? true : false

这并不能回答这个问题。若要评论或要求作者澄清,请在其帖子下方留下评论。-为什么你认为它不能提供答案?我认为它解决了作者的问题。因为你只是发布了一段代码,没有任何解释。。这可能是一篇评论文章,但不应使用。来自
lib.dom.ts
的正式键入的值参数为
value:string | Blob
,因此
number
不是有效的参数。@ohgoodwhy,您在这个答案中看到数字是什么?如果你不喜欢“0”和“1”,你可以使用字符串(0)和字符串(1),引用的数字是字符串。这是一个古老的答案,如你所见
$foobar = new FooBar();
$foobar->foo = $request->foo ? true : false;
$foobar->bar = $request->bar ? true : false;
$foobar->is_active = $request->is_active ? true : false;
let data = new FormData()
data.append('type', '0')
data.append('typeSend', '1')
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
formData.append('name', true);
formData.append('name', 74);
formData.append('name', 'John');

formData.getAll('name'); // ["true", "74", "John"]
$is_active = ($this->request->is_active == 'true') ? true : false