2011-10-20 26 views
13

Non riesco a far funzionare correttamente la seguente funzione. Sembra che la serializzazione sia sbagliata. Si tratta della quinta iterazione di diverse varianti di dati. Inizialmente stavo facendo solo i dati: {'id': id} come faccio al lavoro con WCF, ma con ASMX semplicemente non funziona. Sembra che stia serializzando i dati come id = 1234 invece di id: 1234, ma sono abbastanza nuovo per questo. Qualsiasi aiuto sarebbe apprezzato. Oh, e posso chiamare il servizio direttamente nel browser e restituisce i dati correttamente, quindi so che non è il servizio.Primitiva JSON non valida: id

function getVentID(id) { 
    //look up id in database and get VentID 
    alert('id: ' + id); 
    var jsdata = { "id": + id} 
    $.ajax({ 
     type: 'POST', 
     contentType: 'application/json; charset=utf-8', 
     url: 'services/UserService.asmx/getVentID', 
     data: jsdata, 
     dataType: 'json', 
     success: function (msg) { 
      alert(msg.d); 
     }, 
     error: function (a, b, c) { 
      alert('Error: ' + a.toString() + ' ' + b.toString() + " " + c.toString()); 
     } 
    }); 
} 

p.s. So che ci sono 10 domande identiche, ma nessuna di loro ha risposte che potrei trovare o che ha funzionato per me.

risposta

30

Il più semplice correzione possibile sarebbe quella di cambiare la linea che inizia a var jsdata:

var jsdata = '{id:' + id + '}'; 

Il problema è che jQuery è la codifica jsdata come dati del modulo, non come JSON. Il parametro dataType influenza il modo in cui viene analizzata la risposta, non il modo in cui i dati POST vengono codificati.

In realtà non esiste alcun codice di serializzazione JSON in jQuery per quanto ne so. Apparentemente John Resig suggests using Douglas Crockford's json2.js.

Per usarlo, aggiungere un riferimento script per json.js e poi:

var jstext = JSON.stringify(jsdata, null, 2); 
+1

Beh, tecnicamente che ha risolto l'errore che ho postato, ma ora ottengo: chiamata di servizio Web non valido, valore mancante per il parametro:. \ U0027ID \ u0027 "" StackTrace ":" a System.Web.Script .Services.WebServiceMethodData.CallMethod ... etc Qualche idea? –

+0

Ho provato a cambiare il caso dal momento che il nuovo errore dice ID invece di id ma non è stato d'aiuto e non so nemmeno se questo è relativo ... –

+0

Hmmm. Ammetto di non sapere esattamente cosa si aspetta l'asmx. Qual è un esempio di ciò che fai direttamente nel tuo browser che funziona? Posso sicuramente aiutarti a tradurlo in una chiamata jQuery. – sblom

0

Ho risolto questo problema in questo momento.

È necessario passare l'URL in questo formato:

http://domain.com.br/service.asmx/method?objParam= {q: "ricerca"}

E nel file service.asmx, è necessario dichiarare questo metodo:

Public Function method(objParam As Dictionary(Of String, String)) 

End Function 

Nel tuo codice, assomiglia a:

function getVentID(id) { 
 
    var jsdata = { 
 
    "id": +id 
 
    } 
 
    var sData = JSON.stringify(jsdata); //convert your json in string 
 
    $.ajax({ 
 
    type: 'POST', 
 
    contentType: 'application/json; charset=utf-8', 
 
    url: 'services/UserService.asmx/getVentID', 
 
    data: { 
 
     id: sData 
 
    }, 
 
    dataType: 'json', 
 
    success: function(msg) { 
 
     alert(msg.d); 
 
    }, 
 
    error: function(a, b, c) { 
 
     alert('Error: ' + a.toString() + ' ' + b.toString() + " " + c.toString()); 
 
    } 
 
    }); 
 
}

Problemi correlati