Функция jQuery AJAX - вызов Chrome «Uncaught SyntaxError: Неожиданное число» - PullRequest
7 голосов
/ 21 октября 2011

У меня есть несколько интерактивных объектов на экране, которые представляют объекты в программном обеспечении, взаимодействующем через COM-компонент.

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

Код для конкретной команды, которую я пытаюсь реализовать, - это ASP.NET-страница на C #:

case "myClick":
                dynamic simObj = S8COM.get_SimObject(Request["id"]);
                responseData = "{name:" + simObj.Name.ToString() + ",countInRoutes:" + simObj.CountInRoutes.ToString() + ",countOutRoutes:" + simObj.CountOutRoutes.ToString() + ",index:" + simObj.Index.ToString() + ",capacity:" + simObj.Capacity.ToString() + ",completed:" + simObj.Completed.ToString() + ",routeOutMethod:" + simObj.RouteOutMethod.ToString() + "}";
                break;

Это отлично работает для некоторых объектов, но не для других, вызывая исключение "Uncaught SyntaxError: Unexpected number".

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

S8Web.Requestmanager.makeRequest({ data: { command: "myClick", id: aItem.id }, async: true, callback: function(data){
                        alert(data.CountInRoutes); //Do a vardump of the response
                        }});

Пара ответов также: первый работает нормально, а второй вызывает исключение «Неожиданный номер»:

jsonp1319203225074({name:Start,countInRoutes:0,countOutRoutes:1,index:5,capacity:0,completed:0,routeOutMethod:4});

jsonp1319203225066({name:Process 1,countInRoutes:1,countOutRoutes:1,index:1,capacity:1,completed:0,routeOutMethod:1});

Единственное, что я могу увидеть, что может повлиять на результат, это пробел между «Процесс» и «1». Это то, что выдает эту ошибку?

Ответы [ 4 ]

13 голосов
/ 06 июня 2013

У вас вполне могут возникнуть проблемы с неправильно закрытыми кавычками.

Пример:

<a href='#' onclick="doStuff('joe, '2844')">click here</a>

Поскольку первый параметр не закрыт должным образом, он интерпретируется как 'Джо' .Это оставляет 2844 ' как остальную часть вызова функции, без кавычек.Это обстоятельство приведет к ошибке «Неожиданный номер».

5 голосов
/ 01 июня 2012

Не уверен, поможет ли это вам, но я получил ту же ошибку в chrome, и это было из-за "0", который тянул мои данные json:

{id: "6"}0

0 тянулся за данными JSON, потому что я забыл добавить «выход»; в моей функции PHP, которая обрабатывает вызов AJAX. Я также рекомендую запускать тот же код в FireFox. FireFox часто имеет более информативные сообщения об ошибках, чем chrome:

Ошибка: SyntaxError: JSON.parse: неожиданный непробельный символ после данных JSON

Удачи!

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

также содержало «0» в операторе if, вызывающем неожиданный синтаксис: неожиданное число в Chrome, сравнение было:

if (bcn.length==0 && ecn.length==0 0 && corr.length==0)

дополнительные 0, понимаете? Первые несколько взглядов я не уловил.

0 голосов
/ 21 октября 2011

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

В этом примере у меня есть структура со строковыми свойствами param1 + param2. Вы также можете легко сериализовать их списки.

Просто создайте простую структуру с нужными вам свойствами.

            var jss = new JavaScriptSerializer();
            var jsonApp = new StringBuilder();
            MyStruct item = new MyStruct();
            item.param1 ="111";
            item.param2 ="222";
            jss.Serialize(item, jsonApp); 
            Response.Clear();
            Response.Headers.Add("Content-type", "application/json");
            var resp = HttpContext.Current.Request["callback"] + "(" + jsonApp.ToString() + ")";
            Response.Write(resp);
            Response.End();
...