Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue with saving data #16

Open
mistaq opened this issue Feb 22, 2017 · 0 comments
Open

Issue with saving data #16

mistaq opened this issue Feb 22, 2017 · 0 comments

Comments

@mistaq
Copy link

mistaq commented Feb 22, 2017

Hi,

I followed your PHP sample and the CakePHP 3.0 Cookbook on REST implementation and currently have the following in my config/routes.php, to allow for ajax and the specific controller which is to use jsGrid:

Router::scope('/', function (RouteBuilder $routes) {
    $routes->extensions(['json', 'xml']);
    $routes->resources('Instrument');
}

And in my View, this is the jsGrid script:

<div id="jsGrid"></div>
    <script>
         var id = "<?php echo $id?>" //the id being passed to the View.
         var resources = [];

        var instruments = [
            {Name: "", Id: 0},
            {Name: "Clarinet", Id: 1},
            {Name: "Guitar", Id: 2},
            {Name: "Piano", Id: 3},
            {Name: "Violin", Id: 4},
        ];

        $("#jsGrid").jsGrid({
            controller: {
                loadData: function (filter) {
                    return $.ajax({
                        type: "GET",
                        url: "<?= $host.$basepath ?>/instrument/",
                        data: filter
                    });
                },
                insertItem: function (item) {
                    return $.ajax({
                        type: "POST",
                        url: "<?= $host.$basepath ?>/instrument/",
                        data: item
                    });
                },
                updateItem: function (item) {
                    return $.ajax({
                        type: "PUT",
                        url: "<?= $host.$basepath ?>/instrument/",
                        data: item
                    });
                },
                deleteItem: function (item) {
                    return $.ajax({
                        type: "DELETE",
                        url: "<?= $host.$basepath ?>/instrument/",
                        data: item
                    });
                }
            },

            width: "100%",
            height: "400px",

            inserting: true,
            editing: true,
            sorting: true,
            paging: true,

            data: resources,

            fields: [
                        {
                             name: "Instrument",
                             type: "select",
                             items: instruments,
                             valueField: "Id",
                             textField: "Name",
                             validate: "required",
                             width: 175
                        },
                        {name: "Comment", type: "text", width: 150},
                        {name: "resource_id", type: "text", width: 150, visible: false,
                                        insertTemplate: function() {
                                            var input = this.__proto__.insertTemplate.call(this);
                                            input.val(id)
                                            return input;
                                    }},
                        {type: "control"}
                    ]
        });
    </script>

Currently, when I try to save new data, I get empty lines (as in the a new line will appear in the jsGrid, but nothing that I input when adding it is there).

In the console (I did a console.log of item), I get "Object", which when expanded shows the following:

Comment: ""
Instrument: 6 (the 6th ID in the Select dropdown chosen in one of my tests)
__proto__: Object

When I try to edit data and then save it, I get a "Please wait" message, followed by nothing saving, the line of data still being editable, and a console error as follows:

http://<? $host.$basepath ?>/instrument/edit Failed to load resource: net::ERR_CONNECTION_RESET

With <?= $host.$basepath ?> referring to the host of the server and my system's base URL respectively.

This is an excerpt of the Index page:

<?php
    $config = include("$host.$basepath/config/app.php");
    $db = new PDO($config["db"], $config["username"], $config["password"]);
    $instruments = new Instruments($db);
    switch($_SERVER["REQUEST_METHOD"]) {
        case "GET":
            $result = $instruments->getAll(array(
                "instrument" => $_GET["instrument"],
                "comment" => $_GET["comment"],
                "resource_id" => intval($_GET["resource_id"])
            ));
            break;
        case "POST":
            $result = $instruments->insert(array(
                "instrument" => $_POST["instrument"],
                "comment" => $_POST["comment"],
                "resource_id" => intval($_POST["resource_id"])
            ));
            break;
        case "PUT":
            parse_str(file_get_contents("php://input"), $_PUT);
            $result = $instruments->update(array(
                "instrument" => $_PUT["instrument"],
                "comment" => $_PUT["comment"],
                "resource_id" => intval($_PUT["resource_id"])
            ));
            break;
        case "DELETE":
            parse_str(file_get_contents("php://input"), $_DELETE);
            $result = $instruments->remove(intval($_DELETE["id"]));
            break;
    }
    header("Content-Type: application/json");
    echo json_encode($result);
    ?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant