簡體   English   中英

將對象轉換為URL編碼的字符串時無法將對象轉換為原始值

[英]Cannot convert object to primitive value in converting object into URL encoded string

我正在嘗試使用以下功能將對象轉換為URL編碼的字符串:

console.log(jQuery.param($scope.employee));

console.log($.param($scope.employee));

但是他們給我一個錯誤:

TypeError:無法在Function.r.param(jquery)的Ab(jquery-3.2.1.min.js:4)的e(jquery-3.2.1.min.js:4)的encodeURIComponent()處將對象轉換為原始值-3.2.1.min.js:4)在m。$ scope.save(employees.js:49)在fn(編譯時的評估(angular.min.js:241),:4:388)在e(角度.min.js:286)位於m。$ eval(angular.min.js:149)位於HTMLButtonElement的m。$ apply(angular.min.js:150)。 (angular.min.js:286)

$scope.employee的值

Data: Object
contact_number:"112"
created_at:"2017-08-08 05:27:03"
email:"asd@111.com"
id:9
name:"re"
position:"a"
updated_at:"2017-08-08 05:27:03"

這是使用HomeStead上托管的Laravel和AngularJS開發的。 jQuery已安裝。

更新僅用於驗證目的:

模態HTML代碼:

<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="myModalLabel">{{form_title}}</h4>
</div>
<div class="modal-body">
<form name="frmEmployees" class="form-horizontal" novalidate="">
<div class="form-group error">
<label for="inputEmail3" class="col-sm-3 control-label">Name</label>
<div class="col-sm-9">
    <input type="text" class="form-control has-error" id="name" name="name" placeholder="Fullname" value="{{employee.data.name}}" 
    ng-model="employee.data.name" ng-required="true">
    <span class="help-inline" 
    ng-show="frmEmployees.name.$invalid && frmEmployees.name.$touched">Name field is required</span>
</div>
</div>

<div class="form-group">
<label for="inputEmail3" class="col-sm-3 control-label">Email</label>
<div class="col-sm-9">
    <input type="email" class="form-control" id="email" name="email" placeholder="Email Address" value="{{employee.data.email}}" 
    ng-model="employee.data.email" ng-required="true">
    <span class="help-inline" 
    ng-show="frmEmployees.email.$invalid && frmEmployees.email.$touched">Valid Email field is required</span>
</div>
</div>

<div class="form-group">
<label for="inputEmail3" class="col-sm-3 control-label">Contact Number</label>
<div class="col-sm-9">
    <input type="text" class="form-control" id="contact_number" name="contact_number" placeholder="Contact Number" value="{{employee.data.contact_number}}" 
    ng-model="employee.data.contact_number" ng-required="true">
<span class="help-inline" 
    ng-show="frmEmployees.contact_number.$invalid && frmEmployees.contact_number.$touched">Contact number field is required</span>
</div>
</div>

<div class="form-group">
<label for="inputEmail3" class="col-sm-3 control-label">Position</label>
<div class="col-sm-9">
    <input type="text" class="form-control" id="position" name="position" placeholder="Position" value="{{employee.data.position}}" 
    ng-model="employee.data.position" ng-required="true">
<span class="help-inline" 
    ng-show="frmEmployees.position.$invalid && frmEmployees.position.$touched">Position field is required</span>
</div>
</div>

</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="btn-save" ng-click="save(modalstate, employee.data.id)" ng-disabled="frmEmployees.$invalid">Save changes</button>
</div>
</div>
</div>
</div>

注意:在本教程中,我關注的是ng-model的值是: employee.position但是將其更改為employee.data.position ,原因是當我更新記錄時,值不會填充在字段中,而是添加data后,現在將填充值。

我才剛剛開始學習Laravel和AngularJS。

如果使用的是Angular,則可以使用$ httpParamSerializerJQLike ,示例代碼:

.controller(function($http, $httpParamSerializerJQLike) {
  //...

  $http({
    url: myUrl,
    method: 'POST',
    data: $httpParamSerializerJQLike(myData),
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  });

});

Angular文檔在這里

這可以不用jQuery而完成

var serialize = function(obj, prefix) {
  var str = [], p;
  for(p in obj) {
    if (obj.hasOwnProperty(p)) {
      var k = prefix ? prefix + "[" + p + "]" : p, v = obj[p];
      str.push((v !== null && typeof v === "object") ?
        serialize(v, k) :
        encodeURIComponent(k) + "=" + encodeURIComponent(v));
    }
  }
  return str.join("&");
}

用法console.log(serialize($scope.employee))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM