powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема с хромом и ajax запросом (status = 0)
9 сообщений из 9, страница 1 из 1
Проблема с хромом и ajax запросом (status = 0)
    #37501064
CmeTanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Исходные данные:
После сабмита формы на сервере происходит довольно длительная операция, после чего браузеру отдаётся файл на скачку(результат работы). Чтобы пользователь не елозил по интерфейсу и не кликал ещё раз кнопки, я поднимаю div с анимированной гифкой.

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

Я сделал так - раз в секунду на сервер отправляется ajax-запрос, чтоб узнать закончилась наша длительная операция или нет. Запрос возвращает только true или false в текстовом виде.

В ie и ff работает, а в chrome выдёт ошибку (сваливаемся в error:), status = 0

Вот код упрощённый код контроллера
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Web;
using System.Web.Mvc;

namespace TestChrome.Controllers
{
    public class TestController : Controller
    {
        //
        // GET: /Test/

        public ActionResult Index()
        {
            return View();
        }


        [HttpPost]
        public ActionResult SignFile()
        {
            byte[] content = Encoding.ASCII.GetBytes("trololo");

            FileResult fileResult = new FileContentResult(content, "text/plain");
            fileResult.FileDownloadName = "file.txt";


            Thread.Sleep(new TimeSpan(0, 0, 5));

            Session["filesigned"] = true;// типа закончили длительную операцию на сервере

            return fileResult;
        }


        [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
        public ActionResult CheckIfFileSigned() //ф-ия для проверки завершения длительной операции
        {
            string result = "false";

            if (Session["filesigned"] != null)
                if ((bool)Session["filesigned"])
                {
                    result = "true";
                    Session["filesigned"] = null;
                }

            return Content(result);
        }

    }
}


Вот код вьюшки с со скриптами

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <title>Index</title>

    <script type="text/javascript" src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")"></script>
   
</head>
<body>
    <div>
        
        <script type="text/javascript">
   

            $(function() {
                
                $('#waitdialog').hide();
                
            });


            function sign() {

                $('#waitdialog').show();
               
                closeWaitDialog();
                $('#frmsigndoc').submit();
            }
            
            
            
            function closeWaitDialog() 
            {
          
                
                  $.ajax({
                             url: "@Url.Action("CheckIfFileSigned", "Test")",
                            
                             success: function(data) {
                                 
                                if (data == "true") {
            
                                    $('#waitdialog').hide();
                                     
                                 } else {
                                    
                                 
                                    setTimeout(closeWaitDialog(), 1000);
                                 } 

                                 
                             },
                             
                          //сюда сваливается хром
                             error: function(jqXhr, textStatus, errorThrown) {
                                 
                                
                                 
                                 
                                 alert("Error '" + jqXhr.status + "' (textStatus: '" + textStatus + "', errorThrown: '" + errorThrown + "')");
                                 
                              
                             }
                         
                          
                         });
            }

        </script>


        <span id="time"></span>

        <br/><br/>

        <div id="waitdialog" style="color:Green;width:100px; height:50px;">
            SIGNING...        
        </div>


        <div id="status" style="color:Red; font-weight:bold"></div>

        @using (Html.BeginForm("SignFile", "Test",  FormMethod.Post, new { id = "frmsigndoc" }))
        {
            <input type="button" value="submit" id="btsubmit" onclick="sign()" />
        }


    </div>
</body>
</html>


сам солющен выложил сюда
...
Рейтинг: 0 / 0
Проблема с хромом и ajax запросом (status = 0)
    #37501166
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CmeTanka,

попробуй в
Код: plaintext
1.
2.
3.
4.
5.
6.
function sign() {

                $('#waitdialog').show();
               
                closeWaitDialog();
                $('#frmsigndoc').submit();
            }
заменить closeWaitDialog(); на setTimeout(closeWaitDialog, 1000);

в success тоже замени
setTimeout(closeWaitDialog(), 1000); на setTimeout(closeWaitDialog, 1000);
...
Рейтинг: 0 / 0
Проблема с хромом и ajax запросом (status = 0)
    #37501170
зы
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добавь в вызов атрибут dataType: 'text' согласно документации, а то хрень какую-то возвращаешь вероятно
...
Рейтинг: 0 / 0
Проблема с хромом и ajax запросом (status = 0)
    #37501191
CmeTanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечCmeTanka,

попробуй в
Код: plaintext
1.
2.
3.
4.
5.
6.
function sign() {

                $('#waitdialog').show();
               
                closeWaitDialog();
                $('#frmsigndoc').submit();
            }
заменить closeWaitDialog(); на setTimeout(closeWaitDialog, 1000);

в success тоже замени
setTimeout(closeWaitDialog(), 1000); на setTimeout(closeWaitDialog, 1000);

Хром теперь ошибку не выкидывает, но и надпись signing не исчезает, т.к не попадаем в success
...
Рейтинг: 0 / 0
Проблема с хромом и ajax запросом (status = 0)
    #37501198
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CmeTankaне попадаем в success а куда же попадаем?
...
Рейтинг: 0 / 0
Проблема с хромом и ajax запросом (status = 0)
    #37501204
CmeTanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечCmeTankaне попадаем в success а куда же попадаем?

А вот хз, поставил алерт в success и ничего
...
Рейтинг: 0 / 0
Проблема с хромом и ajax запросом (status = 0)
    #37501208
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CmeTanka,

ты на дебажном веб-сервере (который в составе VS) проверяешь? Он однопоточный..
...
Рейтинг: 0 / 0
Проблема с хромом и ajax запросом (status = 0)
    #37501214
CmeTanka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный МечCmeTanka,

ты на дебажном веб-сервере (который в составе VS) проверяешь? Он однопоточный..

даже если он однопоточный (сомневаюсь), то почему работает в ie и ff?
...
Рейтинг: 0 / 0
Проблема с хромом и ajax запросом (status = 0)
    #37502415
t0rch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
мы для блокировки\разблокировки используем jquery.blockUI.js

получается одна строчка всего:
Код: plaintext
$(document).ajaxStart($.blockUI).ajaxStop($.unblockUI);
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Проблема с хромом и ajax запросом (status = 0)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]