Успех и ошибка успешной смены базы - программирование
Подтвердить что ты не робот

Успех и ошибка успешной смены базы

У меня есть этот базовый код, создайте представление и модель и вызовите метод сохранения для сохранения данных в базу данных:

var form = document.forms[0];

var RetailerModel = Backbone.Model.extend({
    urlRoot: ' retailer.php',
    defaults: {
        name: 'company-name',
        address: 'company-address',
        phone: 'company-phone',
        icon: 'http://localhost/icon.png'
    }
});

var RetailerCollection = Backbone.Collection.extend({

});

var RetailerView = Backbone.View.extend({

    className: 'retailer',

    template: _.template($('#retailer-template').html()),

    initialize: function() {

        var obj = {
            name: form.name.value,
            address: form.address.value,
            phone: form.phone.value
        };

        var o = this;

        this.model.save(obj, {
            success: function(model, response) {
                console.log(model);
                console.log(response);
                o.render();
                console.log('success');
            },
            error: function(model, response) {
                console.log(model);
            }
        });
    },

    render: function() {
        $('#retailer-list').append(this.$el.html(this.template(this.model.toJSON())));

        return this;
    }
});

var RetailerViews = Backbone.View.extend({

});

$('#submit').click(function(e){
    var retailer_model = new RetailerModel();
    var retailer_view = new RetailerView({model: retailer_model});
    form.reset();
});

И php-код для приема данных следующий:

<?php
$connect = mysql_connect('127.0.0.1','root','xxxxxx');
if (!$connect) {
    die('Could not connect: ' . mysql_error());
}

mysql_select_db("retail", $connect);
if($_SERVER['REQUEST_METHOD'] == 'POST') //POST GET PUT DELETE
{
    $data = json_decode(file_get_contents('php://input'), true);
}

$name       = $data['name'];
$address    = $data['address'];
$phone      = $data['phone'];
$icon       = $data['icon'];

if(!(mysql_query("INSERT INTO retailer (name, address, phone, icon)VALUES ('".$name."', '".$address."','$phone', '".$icon."')")))
{

    echo 200;
}
else{
    echo 'record has not been insert to db';
}

mysql_close($connect);

?>

Одна проблема, с которой я сталкиваюсь, заключается в том, что при вызове функции ошибки модель, возвращаемая с сервера, все еще имеет модифицированные атрибуты. Мне интересно, почему это происходит, и как я могу убедиться, что если произойдет ошибка, модель останется неизменной.

Другой вопрос в PHP-коде, когда запрос sql успешный, если я эхо 200 или 200, позвоночник вызовет успех, но если я повторю строку, позвоночник вызовет ошибку, мне интересно, что логика его.

4b9b3361

Ответ 1

Из магистральных документов:

Pass {wait: true}, если вы хотите дождаться сервера до установки новые атрибуты на модели.

Если вы не хотите, чтобы модель обновлялась до тех пор, пока после сохранения успеха не будет успешно пройден проход wait: true в качестве опции.

this.model.save(obj, {
        success: function(model, response) {
            console.log(model);
            console.log(response);
            o.render();
            console.log('success');
        },
        error: function(model, response) {
            console.log(model);
        },
        wait: true // Add this
    });

Ответ 2

The Backbone

save( so are others like fetch, update...) 

возвращает обещание. Вы можете использовать

save().done( 
    function( data ) {}, // success
    function( err ) {}   // fail
)

точно так же, как вы обрабатываете promises. Гарантируется, что метод done() выполнит после того, как сервер вернет материал.

Подробнее см. jQuery API docs для AJAX.jqXHR.

Ответ 3

Backbone возвращает обещание.

Вот что мне нужно, чтобы оно работало.

save({wait: true}).success(function(data){
   console.log(data); //returned data from server
}).error(function(error){
   console.log(error); //error returned from server
});