Страница проблем jQuery не открывается [дублировать]

Вместо того, чтобы бросать код на вас, есть два понятия, которые являются ключом к пониманию того, как JS обрабатывает обратные вызовы и асинхронность. (это даже слово?)

Модель цикла события и параллелизма

Есть три вещи, о которых вам нужно знать; Очередь; цикл события и стек

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

while (queue.waitForMessage()) {
   queue.processNextMessage();
}

Как только он получает сообщение для запуска чего-то, он добавляет его в очередь. Очередь - это список вещей, которые ждут выполнения (например, ваш запрос AJAX). Представьте себе это так:

 1. call foo.com/api/bar using foobarFunc
 2. Go perform an infinite loop
 ... and so on

Когда одно из этих сообщений будет исполнено, оно выталкивает сообщение из очереди и создает стек, стек - это все, что нужно выполнить JS для выполнения инструкции в сообщение. Таким образом, в нашем примере ему говорят позвонить foobarFunc

function foobarFunc (var) {
  console.log(anotherFunction(var));
}

. Так что все, что foobarFunc должно выполнить (в нашем случае anotherFunction), будет вставлено в стек. исполняемый, а затем забытый - цикл события затем переместится на следующую вещь в очереди (или прослушивает сообщения)

. Главное здесь - порядок выполнения. Это

КОГДА что-то будет запущено

Когда вы совершаете вызов с использованием AJAX для внешней стороны или выполняете любой асинхронный код (например, setTimeout), Javascript зависит от ответ, прежде чем он сможет продолжить.

Большой вопрос, когда он получит ответ? Ответ в том, что мы не знаем, поэтому цикл событий ждет, когда это сообщение скажет: «Эй, забери меня». Если JS просто ждал этого сообщения синхронно, ваше приложение замерзнет, ​​и оно сосать. Таким образом, JS продолжает выполнение следующего элемента в очереди, ожидая, пока сообщение не будет добавлено обратно в очередь.

Вот почему с асинхронной функциональностью мы используем вещи, называемые обратными вызовами. Это похоже на обещание буквально. Как и в I , обещание что-то вернуть в какой-то момент jQuery использует специальные обратные вызовы, называемые deffered.done deffered.fail и deffered.always (среди других). Вы можете увидеть их все здесь

Итак, вам нужно передать функцию, которая в какой-то момент будет выполнена с переданными ей данными.

Поскольку обратный вызов не выполняется немедленно, но в более позднее время важно передать ссылку на функцию, которую она не выполнила. поэтому

function foo(bla) {
  console.log(bla)
}

, поэтому большую часть времени (но не всегда) вы пройдете foo не foo()

. Надеюсь, это будет иметь смысл. Когда вы сталкиваетесь с такими вещами, которые кажутся запутанными, я настоятельно рекомендую полностью прочитать документацию, чтобы хотя бы понять ее. Это сделает вас намного лучшим разработчиком.

271
задан Deduplicator 1 March 2015 в 19:50
поделиться

8 ответов

Вам нужен ключ web.config, чтобы включить режим проверки pre 4.5.

Дополнительная информация о ValidationSettings: UnobtrusiveValidationMode :

Указывает как ASP.NET глобально позволяет встроенным элементам проверки правильности использовать ненавязчивый JavaScript для логики проверки на стороне клиента.

Тип: UnobtrusiveValidationMode

Значение по умолчанию: None

Примечания. Если для этого значения ключа установлено значение «Нет» [по умолчанию], приложение ASP.NET будет использовать поведение pre-4.5 (встроенный JavaScript на страницах) для логики проверки на стороне клиента. Если для этого значения ключа установлено значение «WebForms», ASP.NET использует атрибуты данных HTML5 и поздний связанный JavaScript из добавленной ссылки на скрипт для логики проверки на стороне клиента.

Пример:

    <appSettings>
      <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
    </appSettings>
504
ответ дан Brad Larson 25 August 2018 в 22:11
поделиться

, чтобы добавить немного больше ответа от b_levitt ... на global.asax:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;
using System.Web.UI;

namespace LoginPage
{
    public class Global : System.Web.HttpApplication
    {
        protected void Application_Start(object sender, EventArgs e)
        {
            string JQueryVer = "1.11.3";
            ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition
            {
                Path = "~/js/jquery-" + JQueryVer + ".min.js",
                DebugPath = "~/js/jquery-" + JQueryVer + ".js",
                CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".min.js",
                CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".js",
                CdnSupportsSecureConnection = true,
                LoadSuccessExpression = "window.jQuery"
            });
        }
    }
}

на ваш default.aspx

<body>
   <form id="UserSectionForm" runat="server">
     <asp:ScriptManager ID="ScriptManager" runat="server">
          <Scripts>
               <asp:ScriptReference Name="jquery" />
          </Scripts>
     </asp:ScriptManager>
     <%--rest of your markup goes here--%>         
   </form>
</body>
9
ответ дан BernieSF 25 August 2018 в 22:11
поделиться

Вместо отключения новой функции я решил следовать инструкциям ошибки. В my global.asax.cs я добавил:

protected void Application_Start(object sender, EventArgs e)
{
    string JQueryVer = "1.7.1";
    ScriptManager.ScriptResourceMapping.AddDefinition("jquery", new ScriptResourceDefinition
    {
        Path = "~/Scripts/jquery-" + JQueryVer + ".min.js",
        DebugPath = "~/Scripts/jquery-" + JQueryVer + ".js",
        CdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".min.js",
        CdnDebugPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-" + JQueryVer + ".js",
        CdnSupportsSecureConnection = true,
        LoadSuccessExpression = "window.jQuery"
    });
}

Это происходит из сообщения msdn в блоге , в котором подчеркиваются некоторые преимущества сопоставлений ресурсов сценариев. Особый интерес для меня представлял собой централизованный контроль над доставкой файлов сценариев на основе «debug = true», EnableCDN и т. Д.

154
ответ дан b_levitt 25 August 2018 в 22:11
поделиться

Я считаю, что столкнулся с одним и тем же затруднительным положением. Я начал сталкиваться с проблемой, когда я изменил на:

</system.web>
<httpRuntime targetFramework="4.5"/>

Что дает сообщение об ошибке, описанное выше.

добавление:

<appSettings>
  <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />

Решает проблему а затем он заставит ваши проверки / сценарии запускать ошибки времени выполнения Javascript. Если вы измените на:

</system.web>
<httpRuntime targetFramework="4.0"/>

Вы должны быть в порядке, но вам нужно убедиться, что остальная часть вашего кода работает / ведет себя по желанию. Возможно, вам также придется отказаться от некоторых новых функций, доступных только в версии 4.5.

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

https://blogs.msdn.microsoft.com/webdev/2012/11/19/all-about-httpruntime-targetframework/

UPDATE Апрель 2017: После некоторых экспериментов и тестирования я придумал комбинацию, которая работает:

<add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
<httpRuntime targetFramework="4.5.1" />

с:

jQuery версия 1.11.3

10
ответ дан DaniDev 25 August 2018 в 22:11
поделиться

Ненавязчивая проверка включена по умолчанию в новой версии ASP.NET. Ненавязчивая проверка направлена ​​на уменьшение размера страницы путем замены встроенного JavaScript для выполнения проверки с помощью небольшой библиотеки JavaScript, которая использует jQuery.

Вы можете отключить ее, отредактировав web.config, чтобы включить следующее:

<appSettings>
  <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
</appSettings>

Или еще лучше настроить его, изменив метод Application_Start в файле global.asax:

void Application_Start(object sender, EventArgs e) 
{
    RouteConfig.RegisterRoutes(System.Web.Routing.RouteTable.Routes);
    ScriptManager.ScriptResourceMapping.AddDefinition("jquery",
        new ScriptResourceDefinition
        {
            Path = "/~Scripts/jquery-2.1.1.min.js"
        }
    );
}

Страница 399 из Начало ASP.NET 4.5.1 в C # и VB предоставляет обсуждение на пользу ненавязчивой проверки и пошаговое руководство для ее настройки.

Для тех, кто ищет RouteConfig. Он добавляется автоматически при создании нового проекта в visual studio в папку App_Code. Содержимое выглядит примерно так:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Routing;
using Microsoft.AspNet.FriendlyUrls;

namespace @default
{
    public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            var settings = new FriendlyUrlSettings();
            settings.AutoRedirectMode = RedirectMode.Permanent;
            routes.EnableFriendlyUrls(settings);
        }
    }
}
42
ответ дан denver 25 August 2018 в 22:11
поделиться

Проблема возникла из-за проверки валидатора. Просто добавьте ссылку J Query на свою веб-страницу следующим образом, а затем добавьте параметры проверки в файл web.config, чтобы устранить эту проблему. Я тоже столкнулся с одной и той же проблемой, и ниже было дано решение моей проблемы.

Step1:

Step2:

Он разрешит вашу проблему.

7
ответ дан Ivan 25 August 2018 в 22:11
поделиться

Существует как минимум три способа отключить использование ненавязчивого JavaScript для проверки на стороне клиента:

  1. Добавить в файл web.config следующее:
    <configuration>
      <appSettings>
        <add key="ValidationSettings:UnobtrusiveValidationMode" value="None" />
      </appSettings>
    </configuration>
  2. Задайте значение статического свойства System.Web.UI.ValidationSettings.UnobtrusiveValidationMode для System.Web.UI.UnobtrusiveValidationMode.None
  3. Задайте значение свойства экземпляра System.Web.UI.Page.UnobtrusiveValidationMode для System.Web.UI.UnobtrusiveValidationMode.None

Чтобы отключить функциональность для каждой страницы, я предпочитаю установить свойство Page.UnobtrusiveValidationMode, используя директиву страницы:

<%@ Page Language="C#" UnobtrusiveValidationMode="None" %>
85
ответ дан Ryan Prechel 25 August 2018 в 22:11
поделиться

Если ваш код или конфигурация выглядят корректно, посмотрев на другие ответы, у меня также возникла проблема с развернутым веб-сайтом разработки, и выяснилось, что проблема в том, что файл Global.asax был переименован. (По мне, несколько дней назад, когда вы возились с customErrors и Application_Error)

1
ответ дан StingyJack 25 August 2018 в 22:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: