Почему следующий вызов JQuery Ajax приводит к ошибке сценария в IE9? - PullRequest
1 голос
/ 28 апреля 2011

Я делаю следующий вызов JQuery (v1.5.1) Ajax:

function testAjaxCall()
{
  $.ajax(
    {
        url: "/Search.ashx?",
        dataType: "json"
    });
}

Этот вызов возвращает следующий результат JSON:

{ "objectData" : "100" }

Но в IE9 происходит сбой со следующей ошибкой (в других браузерах работает нормально):

SCRIPT1004: ожидается ';' debug.finance.com, строка 1, символ 16

Если я удалю параметр dataType: json, вызов будет успешным. Есть идеи, что не так? Я предполагаю, что мой JSON неверен, но я пропустил его через валидатор, и он не сообщил об ошибках

Пожалуйста, помогите!

РЕДАКТИРОВАТЬ: (более подробно)

Вывод JSON с сервера в обработчике HTTP ASP.NET следующим образом:

public void ProcessRequest(HttpContext context)
{
    context.Response.ContentType = "application/json";
    context.Response.Write("{ \"objectData\" : \"100\" }");
    return;
}

Ответы [ 3 ]

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

Использовали ли вы JSON-кодировку в сценарии на стороне сервера или вы просто "создали его" самостоятельно?

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

Тогда я узнал о том, что вы можете просто получать свои данные на стороне сервера и использовать (например, в php) json_encode () для кодирования ваших данных, а затем вы можете использовать тип данных JQUERY JSON, как вы это сделали здесь, для анализа возвращаемого объекта Javascript.

Это не совсем та же проблема, но мой вопрос здесь должен предоставить немного больше информации о том, что происходит.

0 голосов
/ 23 ноября 2017

Основная проблема заключается в том, что IE9 не поддерживает JSON поверх AJAX.Вместо этого для этого браузера вам нужно использовать JSON-P.

См .: JavaScript: как создать JSONP?

На стороне клиента измените dataType наследует:

// Fall back to JSON-P for IE9 and lower:
dataType: (('withCredentials' in new XMLHttpRequest ()) ? 'json' : 'jsonp'),        

На стороне сервера, непосредственно перед тем, как вы отправите JSON, выполните:

// In JSON-P mode, wrap the JSON with the callback name and brackets:
if (isSet ($_GET['callback']) && preg_match ('/^([_a-zA-Z0-9])$/', $_GET['callback']) ) {
    $json = $_GET['callback'] . '(' . $json . ');';
}
0 голосов
/ 28 апреля 2011

Я выяснил, в чем проблема, благодаря этому (немного не связанному) посту: Сбой вызова AJAX jQuery 1.5 с «неверной меткой» для запросов JSON

Преступник был jquery.validateкоторый не был на 100% совместим с JQuery v1.5.Как только я удалил его, IE9 работает отлично!

Я обновился до jquery.validate v1.8, и теперь все работает прекрасно.

...