javascript - Converting JSON format string into a real object in Angular - Stack Overflow

I have an JSON format string which I want to add like a parameter to atach to a post request.I'm t

I have an JSON format string which I want to add like a parameter to atach to a post request.

I'm trying to do the reques, when I do the request I get this error from my web service:

#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}

It's like the request doesn't contains a real JSON object. How can I transform it? I did some tricks but seems doesn't work. That's my script:

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 bo
                    $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;
                        })
                    }
            });

Edit:

Also I add the php Slim function which parse the request:

 $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
     //                  , bo_idbo, bo_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
                       , bo_idbo, bo_codi) values ('".$json_decode->{'nomAtribut'}."', '3', 1, '0', 1, 1, 'atribut de prova', 1, 1)";

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

Solved: Like @vidriduch told:

$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;
})};

I have an JSON format string which I want to add like a parameter to atach to a post request.

I'm trying to do the reques, when I do the request I get this error from my web service:

#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}

It's like the request doesn't contains a real JSON object. How can I transform it? I did some tricks but seems doesn't work. That's my script:

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 bo
                    $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;
                        })
                    }
            });

Edit:

Also I add the php Slim function which parse the request:

 $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
     //                  , bo_idbo, bo_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
                       , bo_idbo, bo_codi) values ('".$json_decode->{'nomAtribut'}."', '3', 1, '0', 1, 1, 'atribut de prova', 1, 1)";

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

Solved: Like @vidriduch told:

$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;
})};
Share Improve this question edited Feb 26, 2016 at 9:42 jcobo1 asked Feb 26, 2016 at 8:18 jcobo1jcobo1 1,1801 gold badge19 silver badges39 bronze badges 3
  • Use JSON.parse(d). – cl3m Commented Feb 26, 2016 at 8:23
  • You are using angular.toJson on a string. Do you not mean angular.fromJson? – Matt Lishman Commented Feb 26, 2016 at 8:25
  • angular.toJSON is similiar to JSON.stringify, hence d should be an object not a string -> var d = { 'nomAtribut': 'marca','tipus': 'String','mida': '15','prioritat': '1','obligatori': 'No'}; docs.angularjs/api/ng/function/angular.toJson – vidriduch Commented Feb 26, 2016 at 8:43
Add a ment  | 

3 Answers 3

Reset to default 2

angular.toJson Serializes input into a JSON-formatted string

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

in your case you are serializing string ...

your code could look like this:

$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;
})};

If you want to convert a JSON string to JavaScript object, you should use the angular.fromJson() method.

Also, make sure to convert your single quotes ' to double quotes " in your JSON:

// ' bees " 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;
}

Make sure your JSON argument not locked by arbitrary reference.

Assigning a JSON string to a variable and passing it directly will work here.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745208319a4616697.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信