2011-10-21 6 views
7

Ho un numero di oggetti cliccabili sullo schermo che rappresentano oggetti all'interno di un pezzo di software interfacciato tramite un componente COM.jQuery Funzione AJAX - lancio di Chrome "Uncaught SintassiErrore: numero inaspettato"

Quando faccio clic su un oggetto, invio il nome dell'oggetto, l'ID di sessione e il comando che voglio eseguire.

Il codice per il particolare comando che sto cercando di attuare è una pagina ASP.NET C# base:

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; 

Questo funziona bene per alcuni oggetti, ma non altri, lanciando un "SyntaxError Uncaught: "Numero imprevisto".

Il JS Io uso per chiamare questa particolare funzione è:

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

Un paio di risposte così, il primo funziona bene, mentre il secondo genera l'eccezione numero inaspettato:

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

L'unica cosa che posso vedere che potrebbe influenzare il risultato è lo spazio bianco tra "Processo" e "1". È questo che sta generando questo errore?

+0

è solo nel browser Chrome che genera questo errore? –

+2

sì ... poiché è una stringa è necessario avvolgerla tra virgolette .. 'nome: 'Processo 1'' –

risposta

13

È molto probabile che tu stia semplicemente avendo problemi con le virgolette chiuse male.

Esempio:

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

Poiché il primo parametro non è chiuso correttamente, esso viene interpretato come 'Joe'.Questo lascia 2844 ' come il resto della chiamata di funzione, senza una citazione iniziale. Questa circostanza genererà l'errore Numero imprevisto.

0

Non sono sicuro della causa dell'errore, ma è consigliabile lasciare che un serializzatore esegua il lavoro anziché la codifica manuale. Potrebbe aiutare a gestire le diverse interpretazioni nei browser.

In questo esempio, ho una struttura con proprietà stringa param1 + param2. Potresti facilmente serializzare anche elenchi di questi.

Costruisci semplicemente una struttura semplice con le proprietà necessarie.

  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

Non sono sicuro se questo vi aiuterà, ma mi è stato sempre lo stesso errore in cromo e fu a causa di uno "0" che trascinava miei dati JSON:

{id: "6"}0 

Il 0 trainati la Dati JSON perché ho dimenticato di aggiungere un "exit;" nella mia funzione PHP che stava gestendo la chiamata AJAX. Raccomando anche di eseguire lo stesso codice in FireFox. FireFox un sacco di volte ha messaggi di errore più informativi di cromo:

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

Buona fortuna!

+0

Grazie! Ho aggiunto 'die()' alla fine della mia funzione PHP e ho risolto il problema 'SyntaxError: unexpected number'! –

0

ha avuto anche uno "0" nella mia if causando sintassi inaspettata: numero inaspettato in Chrome, il confronto è stato:

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

più 0, vedono? Non ho capito le prime occhiate.