JQuery AJAX, код ошибки: 200, текст состояния: parserorro |Хорошо - PullRequest
5 голосов
/ 04 апреля 2011

Вот забавная ситуация, в которой я нахожусь. Я разрабатываю веб-сайт ASP.Net с использованием VS 2008 и .Net Framework 3.5, и я хочу использовать jquery ajax на тестовой странице, код выглядит следующим образом:

C# Method
[WebMethod]
public static string test()
{
    return "Server Response" ;
}

$(document).ready(function() {
    $("#myDiv").click(function() {
        $.ajax({
            type: "POST",
            url: "AjaxTest.aspx/test",
            data: "",
            contentType: "application/json;charset=utf-8",
            dataType: "json",
                        success: function(msg) {
                            // Replace the div's content with the page 
                            // method's return.
                            alert(msg.d);
                        },
                        error: function(result){ 
                            alert("error occured. Status:" + result.status  
                            + ' --Status Text:' + result.statusText 
                            + " --Error Result:" + result); 
                        }
           });
    });
});

Итак, когда я использую Jquery 1.4.4, вот так:

Я получаю: Status 200; Status Text: OK

Когда я использую Jquery 1.5, я получаю: Status 200; Status Text: Parsererror

Итак, я создал новый веб-сайт в Visual Studio, скопировал и перенес туда код, и он отлично работает !!!!Я не могу понять, что вызывает проблему.Также я использовал методы с параметром и настройкой данных: "{}" и полное удаление данных, но, похоже, ничего не работает.

Я не знаю, нужно ли что-то делать с компонентами DevExpress, которые я 'Я использую или нет.

Я также нашел хороший ответ, который работал с полным методом, подобным этому:

  complete: function(xhr, status) {
            if (status === 'error' || !xhr.responseText) {
                alert("Error");
            }
            else {
                var data = xhr.responseText;
                alert(data);
                //...
            }
        }

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

ОБНОВЛЕНИЕ: Хорошо, сегодня в консоли Google Chrome я заметил некоторые проблемы с синтаксисом в JQuery 1.5. Они перечислены ниже:

UncaughtСинтаксическая ошибка: неожиданный токен1024 *

Ответы [ 7 ]

3 голосов
/ 07 апреля 2011

Проблема не так легко решается с помощью Fiddler, хотя это отличный инструмент.

Проблема, я думаю, описана здесь, и пока что используйте полное событие.Есть некоторые проблемы, которые будут решены в jQuery 1.5.1. См .:

jQuery, возвращающий «parsererror» для запроса ajax

, как он был там опубликован,

complete: function (xhr, status) {
    if (status == 'error' || !xhr.responseText) {
        handleError();
    }
    else {
        var data = xhr.responseText;
        //...
    }
}

Хотя интересно то, что это работает для меня с данными jsonp, когда я запрашиваю сервис amazon (код amazon был основан на какой-то другой публикации в сети, у меня тоже нет ссылки) ala:

   //resp is simple a placeholder for autocomplete's response which I will need to call on a global scope.
        var resp;
        var filter;

        $(document).ready(function () {
            //http://completion.amazon.com/search/complete?method=completion&q=halo&search-alias=videogames&mkt=1&x=updateISSCompletion&noCacheIE=1295031912518
            filter = $("#productFilter").autocomplete({
                source: function (request, response) {
                    resp = response;

                    $.ajax({
                        url: "http://completion.amazon.com/search/complete",
                        type: "GET",
                        cache: false,
                        dataType: "jsonp",
                        success: function (data) {
                            //data[1] contains an array of the elements returned from the service.
                            //use .map to enumerate through them.
                            response($.map(data[1], function (item) {
                                //debugger;
                                 return { label: item, value: item, id: item}
                            }))

                        },
                        data: {
                            q: request.term,
                            "search-alias": "videogames",
                            mkt: "1",
                            callback: '?'
                        }
                    });
                },
                minLength: 2,
                select: function (event, ui) {
                    //$('#browseNode option:first').attr('selected', 'selected');
                    alert('selected');
                },
                open: function () {
                    $(this).removeClass("ui-corner-all").addClass("ui-corner-top");
                },
                close: function () {
                    $(this).removeClass("ui-corner-top").addClass("ui-corner-all");
                }
            });
        });
        //this is the method that will be called by the jsonp request
        function updateISSCompletion() {
            alert('updateiss');
            resp(completion[1]);
        }

2 голосов
/ 04 апреля 2011

Вы должны использовать Fiddler - отличный прокси-сервер для отладки. С его помощью вы можете наблюдать за всем общением между сервером и клиентом

1 голос
/ 09 апреля 2011

Я думаю, вы можете найти ответ на этот вопрос в Эта ссылка

1 голос
/ 04 апреля 2011

Не уверен, поможет ли это, но API ajax () указывает, что они изменили возвращаемый объект для функции обратного вызова success (). Это из jQuery API

Начиная с jQuery 1.5, функция обратного вызова success получает объект «jqXHR» (в jQuery 1.4 он получил объект XMLHttpRequest). Однако, поскольку запросы JSONP и междоменные запросы GET не используют XHR, в этих случаях параметры jqXHR и textStatus, переданные обратному вызову успеха, не определены.

Вы можете найти его здесь, если это вообще поможет ...

jQuery $ ajax API

У меня похожая проблема, и я не могу извлечь объект JSON из каких-либо функций обратного вызова.

0 голосов
/ 03 сентября 2013

У меня была похожая проблема.

Я вызвал в AJAX службу REST с методом POST и получил ответ:

аргументы [0] = статус 200 (ОК) | arguments [1] = "parseerror" | arguments [2] = "Неверный JSON:"

Мой метод сервера вернул значение «void». Чтобы решить эту проблему, я заменил ее логическим значением, например.

0 голосов
/ 12 апреля 2013

В моем случае (при использовании «jquery 1.9.1») добавление dataType: «json» решило проблему «parsererror» (я ранее не указывал dataType, и эта проблема возникла).

0 голосов
/ 19 июля 2012

У меня тоже была эта проблема, но в PHP Когда я вставляю 'remote.php':

`echo $msg`' 

возникает проблема.Когда я использую json_encode():

echo json_encode($msg);

, тогда все работает.

Это странно, потому что я получаю ответ от сервера со статусом «ОК», поэтому функция «успех» должна работатьне «ошибка».В «успехе» у меня есть только

success: function(res){ console.log(res);}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...