2015-09-28 5 views
0

Я создаю веб-сайт с использованием ASP. NET с большой клиентской стороной, которая заботится о многих событиях для сайта. На стороне клиента через AJAX я обновляю, удаляю и добавляю в базу данных (в этом порядке!). Мой вопрос в том, что порядок задач очень важен: сначала обновить базу данных, второй - удалить из базы данных, третье - добавить в базу данных: Должен ли я сделать синхронный вызов AJAX? изменив «async» на «false»? , или я должен оставить его как true по умолчанию? Какой подход следует принять?jquery ajax вызов синхронно для баз данных

+1

Нет, оставьте это верно и не отправляйте второй запрос до первого завершения. Никогда не используйте синхронный ajax, если вы не пытаетесь что-то сделать во время клика или отправки события, которое приведет к перезагрузке страницы. –

+1

Если вам нужно сделать 3 определенных обновления баз в определенном порядке, вы должны делать все 3 в рамках транзакции. –

ответ

0

U должен сделать это, отправив только один вызов ajax для всей необходимой вам операции и сделав это Ajax вызов асинхронной лжи.

0

в этом случае было бы лучше использовать вместо async: true и цепочки ваших запросов, так что они происходят одно за другим.

$.ajax({ 
    type:'put', 
    url: '/model/7256185', 
    data: {name: 'Lucy'} 
}).then(function() { 
    return $.ajax({ 
     type:'delete', 
     url: '/model/7256186' 
    }); 
}).then(function() { 
    return $.post('/model', {name: 'bob'}); 
}).then(function (result) { 
    console.log("All Done!"); 
    console.log(result); 
}, function() { 
    console.log('An error has occurred!'); 
    console.log(arguments); 
}); 

Это гарантирует, что запросы происходят в порядке, и это не приводит к тому, что ваша страница будет отображаться сломанной во время запросов (что происходит с синхронным req uest.)

Он также позволяет использовать загрузку gif, если вы того пожелаете. При синхронных запросах загрузка gif не будет вращаться.

0

Вы НЕОБХОДИМО использовать транзакции как в бизнесе, так и на уровне данных вашего бэкэнд.

Обычно я предпочитаю выполнять короткие задачи (каждый объект с собственными репозиториями) и поддерживать соединение как можно меньше в слое данных, а затем управлять транзакционной логикой на бизнес-уровне, используя, например, класс TransactionScope ,

После этого на самом деле не имеет значения, вызываете ли вы сервис/метод синхронно или асинхронно.

Смежные вопросы