Функция ошибки jQuery aspx всегда вызывается, даже с явно допустимыми возвращаемыми данными

Я делаю вызов ajax, используя jQuery (jquery- 1.5.2.мин.js). Сервер принимает вызов. fiddler показывает, что текст ответа кажется правильным. Но в javascript моя ошибка: функция вызывается вместо моего успеха: функция, и данные параметров функции ошибки не дают большого представления о проблеме.

Вот функция, в которой я делаю первоначальный вызов:

function SelectCBGAtClickedPoint()
{
    $.ajax( {
        type: "GET",
        dataType: "text",
        url: "http://localhost/ajax/SelectCBGAtPoint/1/2",
        success:
            function( msg )
            {
                alert( "success: " + msg );
            },
        error:
            function( jqXHR, textStatus, errorThrown )
            {
                alert( "error: " + jqXHR + textStatus + errorThrown );
            }
    } );
}

Вот функция, в которой я обрабатываю вызов в моем cherrypy код сервера:

def ajax( ajax, *args ):
    with lock:
        print "ajax request received: " + str( args )

        cherrypy.response.headers[ "Content-Type" ] = "application/text"

        return "{ x: 0 }"

Cherrypy — странный зверь, и я подумал, что проблема должна быть в нем. Но, как я уже сказал, я вижу, что и запрос уходит, и ответ возвращается в Fiddler. Вот что Fiddler показывает в виде необработанного представления ответа:

HTTP/1.1 200 OK
Date: Mon, 11 Apr 2011 17:49:25 GMT
Content-Length: 8
Content-Type: application/text
Server: CherryPy/3.2.0

{ x: 0 }

Выглядит хорошо, но затем, вернувшись в javascript, я получаю сообщение об ошибке: функция со следующими значениями параметров (как показано в firebug):

errorThrown = ""
jqXHR = Object { readyState=0, status=0, statusText="error"}
statusText = "error"

Я не знаю, откуда взялось это слово «ошибка». Эта строка нигде не появляется в коде моего сервера Cherpy.

Обратите внимание: несмотря на то, что я возвращаю строку JSON, я установил для типов отправки и получения значение «текст» на данный момент, просто для упрощения, чтобы изолировать проблему.

Любые идеи, почему я получаю этот ответ «ошибка», даже если errorThrown пуст? Может быть, я неправильно "инициализировал" jQuery или jQuery.ajax?


person M Katz    schedule 11.04.2011    source источник
comment
Это ключевое слово ошибки исходит от jQuery, это то, что он устанавливает для statusText, если видит ошибку. Но это, конечно, странно в вашем случае, поскольку у вас явно есть ответ 200. Может быть, попробовать получить неминифицированную версию jQuery и выполнить часть обработки ответов ajax?   -  person Milimetric    schedule 11.04.2011
comment
@Milimetric, спасибо за предложение. Я выполнил код в jquery и заметил, что логическое значение crossDomain было установлено в некоторых структурах обработки сообщений. Итак... Д'о! Мой браузер указывал на файл://C:/... URL-адрес, и jquery рассматривал мой ajax-вызов htt p://localhost/... как междоменный, что, я думаю, имеет смысл. Это больше похоже на кросс-протокол, но есть смысл в том, что jquery отказывается от него. Я думаю, что мое единственное предложение было бы для jquery изменить строку ошибки в этом случае, чтобы пожаловаться на кросс-доменный или кросс-протокол, чтобы дать представление о том, что произошло.   -  person M Katz    schedule 12.04.2011
comment
договорились о более подробных сообщениях об ошибках   -  person Milimetric    schedule 12.04.2011


Ответы (1)


Моя проблема была такой же, как у М. Каца, мой браузер указывал на файл:///c:/temp.html, и jquery рассматривал мой запрос как междоменный. Однако установка для свойства crossDomain значения true не имела никакого эффекта. Мне пришлось переместить страницу под свой веб-проект, но как только я это сделал, все волшебным образом заработало.

person GrokSrc    schedule 01.06.2012