Ошибка jQuery $ .ajax без сообщения об ошибке, сервер ответил 200 OK

0

У меня есть вызов ajax, который работает нормально локально, но когда я опубликовал его на сервере, код никогда не выполняется, но в любом случае возвращает "200 OK". Код "успех" не выполняется, а код ошибки отсутствует. Здесь мой вызов ajax:

$.ajax({
                type: "POST",
                url: "/CargadorContadores.aspx/ObtenerContadores",
                contentType: "application/json; charset=utf-8",
                data: "",
                async: false,
                dataType: "json",
                success: function(data) {
                    var myObj = JSON.parse(data.d);

                    for (var i = 0; i < myObj.length; i++) {
                        var element = document.getElementById("LbItem " + myObj[i].MenuItemID);
                        element.innerHTML = "<b>" + element.innerHTML + " (" + myObj[i].Cantidad + ")</b>";
                    }
                },
                error: function(xhr, status, error) {
                    var err = eval("(" + xhr.responseText + ")");
                    alert(err.Message);
                }
            });
        });

Я также попытался поместить полный url в поле "url", но все равно не повезло. Странно то, что когда я помещаю полный URL-адрес непосредственно в браузер, он все еще не выполняет код. И он отлично работает на месте!

Я знаю, что там есть аналогичная запись (jQuery $.ajax не работает без ошибок, сообщений об ошибках, а сервер ответил на 200 OK), но он не разрешен, и здесь он сходит с ума.

PD: это НЕ кросс-домен, мой код ajax находится в.ascx, и я пытаюсь вызвать метод на.aspx

Огромное спасибо!!!!

EDIT: Я попытался удалить ссылку System.web.extensions моего веб-проекта и добавить dll в мой bin, но он все еще не работает (версия 1.0.61025.0). Кроме того, я запускаю ASP.NET-сайт в IIS с фреймворком 2.0, и у меня нет фреймворка 3.5, установленного на моем сервере (но локально я это делаю). Может, проблема? Я не могу установить его из-за политики безопасности клиента, что мне делать?

EDIT 2: Я попытался сделать простой ответ из моего.aspx, просто чтобы проверить, была ли проблема в этом методе, но она все еще не выполняет функцию успеха. Вот мой код.aspx:

[WebMethod]
        public static string ObtenerContadores()
        {

            return new JavaScriptSerializer().Serialize("true");
        }

и адаптировал.ascx

$.ajax({
                    type: "POST",
                    url: "/CargadorContadores.aspx/ObtenerContadores",
                    contentType: "application/json; charset=utf-8",
                    data: "",
                    async: false,
                    dataType: "json",
                    success: function(dictionary) {
                        alert("hello");
                    },
                    error: function(xhr, status, error) {
                        var err = eval("(" + xhr.responseText + ")");
                        alert(err.Message);
                    }
                });
            });
  • 0
    Проблема на стороне сервера, проверьте ответ
Теги:

4 ответа

0
Лучший ответ

Я хочу поблагодарить всех за вашу помощь. Наконец, мне пришлось установить 3.5 Framework на сервере, у меня не было выбора. Второй я установил его и обновил ссылки dll web.config на 3.5, он работал как шарм.

Еще раз спасибо!!!!!

0

Если его VS2012, попробуйте добавить Mime Type Handler, поскольку VS2012 имеет IIS express и ему нужно добавить обработчик Mime-типа извне, добавьте ниже код в web.config

<system.webServer>
<staticContent>
  <mimeMap fileExtension=".json" mimeType="application/json" />
</staticContent>
</system.webServer>

.. и если его не VS2012, то следуйте этой ссылке

добавить поддержку.json в IIS 7

0

Хорошо, я полагаю, что понял это, поэтому я оставляю второй ответ, чтобы сохранить предыдущее обсуждение.

Здесь исправление. Удалите эту строку:

contentType: "application/json; charset=utf-8",

В моем тестовом скрипте это вызвало jQuery для отправки application/json; charset=utf-8 заголовка Content-Type application/json; charset=utf-8 application/json; charset=utf-8, как и ожидалось, но фактическое содержимое запроса не было отправлено должным образом как JSON. Например, вместо отправки {"foo":"bar"}, он отправил foo=bar. В результате сценарий приема действовал так, как будто никаких данных не было опубликовано вообще. Когда я прокомментировал вышеприведенную строку, мой тестовый скрипт работал нормально и сделал все, что я ожидал, со значениями, полученными от целевого URL.

Обратите внимание, что это приведет к тому, что ваши данные будут опубликованы как обычные данные. Например, если ваш $.ajax() выглядит так, опубликованные данные будут содержать переменную foo и one named who:

$.ajax({
    ...
    data: {foo : "bar",
        who : "what"},
    ...
});

Если вы хотите опубликовать уже сериализованный JSON, сделайте это так:

$.ajax({
    ...
    data: { somevariablename: '{"foo":"bar","who":"what"}' },
    ...
});

Затем вам просто нужно проанализировать параметр POST somevariablename на стороне сервера.

Надеюсь это поможет!

0

Вот ваша проблема: "Странно то, что когда я помещаю полный URL-адрес прямо в браузер, он все равно не выполняет код". Ваш JavaScript ожидает - требует ответа JSON и, по-видимому, вообще не получает ответа. Это не проблема JavaScript, а проблема с вашей страницей.aspx.

EDIT: основываясь на ваших комментариях ниже, ясно, что проблема в том, что ваша страница.aspx не возвращает то, что вы ожидаете. Поскольку.aspx не дает ожидаемого результата, даже если вы переходите к нему напрямую, проблема заключается в этой странице, а не в jQuery.

Представьте, что.aspx производит {}, false или true. Ваш код success будет запущен, но ничего не сделает. Попробуйте поставить alert("Foo"); там и наблюдайте, что происходит. Проблема заключается не в том, что ваш jQuery заблокирован; это то, что он не получает значимого ввода с вашей страницы.aspx.

PS Я бы рекомендовал использовать переменное имя, отличное от data в вашей функции успеха, на всякий случай, если он будет испорчен атрибутом объекта data в вашем вызове.ajax.

  • 0
    Я знаю, это моя проблема, что мой JavaScript не получает ответ от .aspx, но локально он работает отлично. Там нет ошибки в моем коде. Я предполагаю, что это ошибка конфигурации, может быть .dll или что-то в этом роде.
  • 0
    Я имею в виду это. Вы говорите, что даже когда вы переходите непосредственно к URL-адресу, о котором идет речь, код не выполняется. Я интерпретировал это как означающее, что вы переходите к yourserver.whither / CargadorContadores.aspx / ObtenerContadores, а ASPX не выполняется. Если это то, что вы говорите, проблема не в jQuery или JSON; это проблема с вашей страницей .aspx. Если это не то, что вы имеете в виду, пожалуйста, дайте мне знать.
Показать ещё 7 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню