2011-10-21 9 views
7

Tengo una cantidad de objetos seleccionables en la pantalla que representan objetos dentro de un software que se interconecta a través de un componente COM.jQuery Función AJAX - Chrome throwing "Uncaught SyntaxError: número inesperado"

Cuando hago clic en un objeto, le envío el nombre del objeto, la ID de sesión y el comando que quiero ejecutar.

El código para el comando en particular que estoy tratando de poner en práctica es una página ASP.NET C# basado:

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; 

Esto funciona bien para algunos objetos, pero no en otros, lanzando una "SyntaxError no detectada: Número inesperado "excepción.

El JS que utilizo para llamar a esta función particular es:

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

Un par de respuestas, así, el primero funciona bien, mientras que la segunda tiros la excepción inesperada Número:

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}); 

Lo único que puedo ver que podría afectar el resultado es el espacio en blanco entre "Proceso" y "1". ¿Eso es lo que está arrojando este error?

+0

¿Es solo en el navegador Chrome que arroja este error? –

+2

sí ... ya que es una cadena que debe envolver entre comillas ... 'nombre: 'Proceso 1'' –

Respuesta

13

Es muy posible que simplemente tenga un problema con las comillas incorrectamente cerradas.

Ejemplo:

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

Desde el primer parámetro no está correctamente cerrada, que está siendo interpretado como 'Joe,'.Eso deja 2844 ' como el resto de la llamada de función, sin una cita inicial. Esta circunstancia arrojará el error Número inesperado.

0

No estoy seguro de la causa del error, pero considere dejar que un serializador haga el trabajo en lugar de la codificación manual. Podría ayudar a cuidar las diferentes interpretaciones en los navegadores.

En este ejemplo, tengo una estructura con propiedades de cadena param1 + param2. También podría serializar listas de estos fácilmente.

Simplemente construya una estructura simple que tenga las propiedades que necesita.

  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(); 
5

No estoy seguro si esto le ayudará, pero que estaba recibiendo el mismo error en cromo y fue a causa de un "0" que arrastraba mis datos JSON:

{id: "6"}0 

El 0 perdían la Datos JSON porque olvidé agregar una "salida"; en mi función PHP que manejaba la llamada AJAX. También recomiendo ejecutar el mismo código en Firefox. FireFox muchas veces tiene mensajes de error más informativos que chrome:

Error: SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data

¡Buena suerte!

+0

¡Gracias! Agregué 'die()' al final de mi función PHP y eso resolvió el problema 'SyntaxError: unexpected number'. –

0

también tenían un "0" en mi sentencia if causando sintaxis inesperada: número inesperado en Chrome, la comparación fue:

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

adicional 0, lo ven? No entendí las primeras miradas.

Cuestiones relacionadas