Моя проблема началась, когда я попытался изменить сервер из IIS Express на локальный IIS (при использовании LocalDB).
Я использовал LocalDB (для целей dev), и когда я перешел из Local IIS в IIS Express, Visual Studio переключила мой источник данных с Data Source = (LocalDb) \ MSSQLLocalDB на Источник данных =. \ SQLEXPRESS
Неправильная строка соединения
Правильная строка соединения
Надеюсь, что это поможет кому-то.
У меня была та же проблема, когда Chrome не отправлял запрос AJAX на сервер в событии window.unload.
Я мог только заставить его работать, если запрос был синхронным. Я смог сделать это с помощью Jquery и установить для свойства async значение false:
$(window).unload(function () {
$.ajax({
type: 'GET',
async: false,
url: 'SomeUrl.com?id=123'
});
});
Вышеприведенный код работает для меня в IE9, Chrome 19.0.1084.52 m и Firefox 12.
Я знаю, что этот вопрос был задан некоторое время назад, и то, что я собираюсь сказать, имеет отношение к новым версиям Chrome, но я думаю, что это может быть полезно для многих разработчиков.
Like @Garry Английский сказал , отправка асинхронного запроса во время страницы onunload не будет работать, так как браузер убьет поток перед отправкой запроса. отправка запроса на синхронизацию должна работать.
Это было правильно до версии 29 Chrome, но в Chrome V 30 он неожиданно прекратил работу , как указано здесь .
Похоже, что единственный способ сделать это сегодня - использовать onbeforeunload событие , как предлагается здесь .
НО ПРИМЕЧАНИЕ: другие браузеры не позволят вы отправляете запросы Ajax в событии onbeforeunload вообще. так что вам нужно будет выполнить действие как в разгрузке, так и перед загрузкой, и проверить, было ли это уже сделано.
Что-то вроде этого:
var _wasPageCleanedUp = false;
function pageCleanup()
{
if (!_wasPageCleanedUp)
{
$.ajax({
type: 'GET',
async: false,
url: 'SomeUrl.com/PageCleanup?id=123',
success: function ()
{
_wasPageCleanedUp = true;
}
});
}
}
$(window).on('beforeunload', function ()
{
//this will work only for Chrome
pageCleanup();
});
$(window).on("unload", function ()
{
//this will work for other browsers
pageCleanup();
});
Надеется, что это поможет кто-нибудь.
Попробуйте создать переменную (желательно Boolean) и измените ее, как только вы получите ответ от вызова Ajax. И положите функцию bas_disconnect_only()
внутри цикла while. У меня также была такая проблема, как однажды. Я думаю, это происходит потому, что Chrome не ждет вызова Ajax. Я не знаю, как я его исправил, и я не пробовал этот код, поэтому я не знаю, работает ли он. Вот пример этого:
var has_disconnected = false;
window.onbeforeunload = function () {
while (!has_disconnected) {
bas_disconnect_only();
// This doesn't have to be here but it doesn't hurt to add it:
return true;
}
}
И внутри функции bas_send_request()
( xmlhttp - HTTP-запрос):
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4 && xmlhttp.status == 200)
has_disconnected = true;
}
Хорошо удачи, и я надеюсь, что это поможет.
Осмотрите метод Navigator.sendBeacon () , который был создан для этой цели.
На странице MDN:
Навигатор .sendBeacon () может использоваться для асинхронной передачи небольших HTTP-данных из User Agent на веб-сервер.
blockquote>
Этот метод удовлетворяет потребности аналитики и диагностики, которые обычно пытаются отправить данные на веб-сервер до выгрузки документа. Отправка данных может привести к упущенной возможности сбора данных. Однако гарантировать, что данные были отправлены во время разгрузки документа, является тем, что традиционно было трудным для разработчиков.
blockquote>Это относительно новый API и, похоже, не поддерживается IE еще.