2016-02-26 18 views
2

我有一個JSON格式的字符串,我想添加一個參數以附加到發佈請求。將JSON格式的字符串轉換爲Angular中的實際對象

我試圖做reques,只有這樣,我從我的web服務收到此錯誤請求:

#0 /opt/assets/WS/ws.php(48): Slim\Slim::handleErrors(8, 'Trying to get p...', '/opt/assets/WS/...', 48, Array) 
#1 [internal function]: {closure}() 
#2 /opt/assets/WS/vendor/slim/slim/Slim/Route.php(468): call_user_func_array(Object(Closure), Array) 
#3 /opt/assets/WS/vendor/slim/slim/Slim/Slim.php(1357): Slim\Route->dispatch() 
#4 /opt/assets/WS/vendor/slim/slim/Slim/Middleware/Flash.php(85): Slim\Slim->call() 
#5 /opt/assets/WS/vendor/slim/slim/Slim/Middleware/MethodOverride.php(92): Slim\Middleware\Flash->call() 
#6 /opt/assets/WS/vendor/slim/slim/Slim/Middleware/PrettyExceptions.php(67): Slim\Middleware\MethodOverride->call() 
#7 /opt/assets/WS/vendor/slim/slim/Slim/Slim.php(1302): Slim\Middleware\PrettyExceptions->call() 
#8 /opt/assets/WS/ws.php(59): Slim\Slim->run() 
#9 {main} 

這就像請求不包含一個真正的JSON對象。我怎樣才能改變它?我做了一些技巧,但似乎不工作。 這是我的腳本:

assets.controller('AfegirTipusActiusCtrl', function ($scope, $http){ 

        // Camps formulari text pla 
       /* $scope.nomAtribut = "<input type='text' name='firstname'>"; 
        $scope.mida = "<input type='number' name='firstname'>"; 
        $scope.obligatori = "<input type='checkbox' name='vehicle' value='yes'>"; */ 

        // Construeix combo 
        $http.get('http://10.0.203.73/WS/ws.php/getCombo/1').success(function(data) { 
         $scope.options = data; 
        }); 

        $scope.atributs = []; 

        $scope.addRow = function(){ 
         var newRow = { 
          nomAtribut: "", 
          tipus: "", 
          mida: "", 
          prioritat: "", 
          obligatori: "", 
          observacions: "" 
         } 
         $scope.atributs.push(newRow); 
        } 

        /* $scope.addField = function() { 
         $scope.atributs.push(newRow); 
        };*/ 

        $scope.prioritat = $scope.atributs.length; 

        // Envia atributs a WS 
        $scope.sendRow = function(){ 
         var d = "{'nomAtribut': 'marca','tipus': 'String','mida': '15','prioritat': '1','obligatori': 'No'}"; 
         $http.post("http://10.0.203.73/WS/ws.php/tipusactius/alta", angular.toJson(d)).success(function(data){ 
          $scope.status = data; 
         }) 
        } 
      }); 

編輯:

另外我想補充其解析請求php的修身功能:

$app->post('/tipusactius/alta', function() use ($app) { 
     $json = $app->request->getBody(); 
     header("Content-Type: application/json"); 
     $json_decode = json_decode($json); // $json_decode conte l'bjecte format a partir del json del request 
     echo $json_decode->{'tipus'}; 

    // $sql = "INSERt INTO atributs_actiu (nomAtribut, midaAtribut, tipus_actius_idtipus_actius, atributObligatori, ordre, tipusAtributs_idTipus, observacions 
    //     , combo_idcombo, combo_codi) values ('".$json_decode->{'nomAtribut'}."', '".$json_decode->{'mida'}."', 1, '0', 1, 1, 'atribut de prova', 1, 1)"; 
     $sql = "INSERt INTO atributs_actiu (nomAtribut, midaAtribut, tipus_actius_idtipus_actius, atributObligatori, ordre, tipusAtributs_idTipus, observacions 
         , combo_idcombo, combo_codi) values ('".$json_decode->{'nomAtribut'}."', '3', 1, '0', 1, 1, 'atribut de prova', 1, 1)"; 

     $mysqli=getDB(); 
     $result = $mysqli->query($sql); 
}); 

解決: 像@vidriduch說:

$scope.sendRow = function() { 
    var d = { 
     'nomAtribut': 'marca', 
     'tipus': 'String', 
     'mida': '15', 
     'prioritat': '1', 
     'obligatori': 'No' 
    }; 

    $http.post("http://10.0.203.73/WS/ws.php/tipusactius/alta", angular.toJson(d)).success(function(data) { 
     $scope.status = data; 
})}; 
+0

使用'JSON.parse(d)'。 – cl3m

+0

您正在字符串上使用'angular.toJson'。你不是指'angular.fromJson'嗎? –

+0

angular.toJSON與JSON.stringify類似,因此d應該是一個不是字符串的對象 - > var d = {'nomAtribut':'marca','tipus':'String','mida':'15', 'prioritat':'1','obligatori':'否'}; https://docs.angularjs.org/api/ng/function/angular.toJson – vidriduch

回答

2

angular.toJson輸入序列化到JSON格式的字符串

https://docs.angularjs.org/api/ng/function/angular.toJson

在你的情況下,你正在序列化字符串...

你的c Ode可能看起來像這樣:

$scope.sendRow = function() { 
    var d = { 
     'nomAtribut': 'marca', 
     'tipus': 'String', 
     'mida': '15', 
     'prioritat': '1', 
     'obligatori': 'No' 
    }; 

    $http.post("http://10.0.203.73/WS/ws.php/tipusactius/alta", angular.toJson(d)).success(function(data) { 
     $scope.status = data; 
})}; 
+1

是的,它現在有效。謝謝。 – proktovief

1

如果您想將JSON字符串轉換爲JavaScript對象,則應使用angular.fromJson()method

此外,請確保您的單引號轉換'到雙引號"JSON

// ' becomes " in your string 
var d = '{"nomAtribut": "marca","tipus": "String","mida": "15","prioritat": "1","obligatori": "No"}'; 

$http.post("http://10.0.203.73/WS/ws.php/tipusactius/alta", angular.fromJson(d)) 
.success(function(data){ 
    $scope.status = data; 
} 
+0

爲什麼要將它轉換爲對象,然後再返回到字符串? –

+1

謝謝,錯誤的複製/粘貼。固定! – cl3m

+0

@MattLishman我試過你的答案,它不工作我從Web服務中得到同樣的錯誤 – proktovief

0

確保您的JSON參數不被任意引用鎖定。

將JSON字符串指定給變量並直接傳遞將在此處起作用。

相關問題