2012-01-03 29 views
5

sto ottenendo "System.ArgumentException: Invalid JSON primitiva: pagenum" al mio ritorno "sdata" nel codice seguente:System.ArgumentException: Invalid JSON errore primitivo

function getPageData() { 
pagenum = parseInt(eSc("#resultsBtn").attr("data-pagenum")); 
if (pageName === "Home") { 
    scrollPath = "/Home/GetResults/"; 
    sdata = { "pagenum": pagenum, "sortType": sortType }; 
} 
else if (pageName === "Search") { 
    scrollPath = "/SearchAjax/GetResultsKeyword/"; 
    sdata = { "pagenum": pagenum, "sortType": sortType, "keyword": keyword }; 
} 
else if (pageName === "Cat") { 
    scrollPath = "/SearchAjax/GetResultsCategory/"; 
    sdata = { "pagenum": pagenum, "sortType": sortType, "ID": categoryId, "Level": level }; 
} 
else if (pageName === "Merchant") { 
    scrollPath = "/SearchAjax/GetResultsMerchant/"; 
    sdata = { "pagenum": pagenum, "sortType": sortType, "ID": merchantId }; 
} 

}

e la funzione init su pageload:

function init(a, b, c, d, e, f, g) { 
getPageData(); 
eSc.ajax({ 
    type: 'POST', 
    url: scrollPath, 
    data: sdata, 
    success: function (data) { 
     eSc("#moreResults").html(data); 
    } 
}); 

}

gli utenti non vedono un problema di i dati corretti sono ancora restituiti, ma ricevo un'e-mail di errore ogni volta che qualcuno carica più dati dal nostro sito in produzione (non si verifica nello sviluppo, quindi è difficile risolverli). Quando ispeziono in firebug, vedo che i dati corretti sono passati. Allora, perché ricevo ancora questo errore ?!

Qualche consiglio sul perché questo potrebbe accadere?

+3

si potrebbe trovare utile questo post se siete curiosi di sapere il motivo per cui utilizzando 'JSON.stringify' risolve il problema: http: // encosia. com/asmx-scriptservice-error-invalid-json-primitive/ –

risposta

14
function init(a, b, c, d, e, f, g) { 
getPageData(); 
eSc.ajax({ 
    type: 'POST', 
    url: scrollPath, 
    contentType: 'application/json', 
    dataType: 'json', 
    data: JSON.stringify(sdata), 
    success: function (data) { 
     eSc("#moreResults").html(data); 
    } 
}); 

passare sData in formato json, utilizzando JSON.stringify per formattare i dati in formato json.

Funziona nel mio caso. Spero che funzioni nel tuo caso.

0

jQuery serializza il parametro di dati $ .ajax() utilizzando lo schema con codifica URL, indipendentemente dal tipo di contenuto specificato. mi consiglia di utilizzare il tipo di contenuto in ajax:

function init(a, b, c, d, e, f, g) { 
getPageData(); 
eSc.ajax({ 
    type: 'POST', 
    url: scrollPath, 
    contentType: 'application/json', 
    dataType: 'json', 
    data: sdata, 
    success: function (data) { 
     eSc("#moreResults").html(data); 
    } 
}); 

Inoltre è necessario utilizzare le virgolette nel parametro dei dati. Nella tua versione è un oggetto letterale JavaScript al posto della stringa JSON.

function getPageData() { 
pagenum = parseInt(eSc("#resultsBtn").attr("data-pagenum")); 
if (pageName === "Home") { 
    scrollPath = "/Home/GetResults/"; 
    sdata = '{ "pagenum":'+ pagenum +' , "sortType":'+ sortType +' }'; 
} 
else if (pageName === "Search") { 
    scrollPath = "/SearchAjax/GetResultsKeyword/"; 
    sdata = '{ "pagenum": ' + pagenum + ', "sortType": '+ sortType +', "keyword": ' + keyword +' }'; 
} 
else if (pageName === "Cat") { 
    scrollPath = "/SearchAjax/GetResultsCategory/"; 
    sdata = '{ "pagenum":'+ pagenum + ', "sortType":'+ sortType +', "ID":'+ categoryId +', "Level": '+level+' }'; 
} 
else if (pageName === "Merchant") { 
    scrollPath = "/SearchAjax/GetResultsMerchant/"; 
    sdata = '{ "pagenum":'+ pagenum +', "sortType":'+ sortType + ', "ID":'+ merchantId +'}'; 
} 

Spero che sia d'aiuto.

+0

ottimo, comunque sto ricevendo il seguente errore (anche se la risposta è corretta in firebug) – Ortal

+0

scusa, invio invio troppo presto: "ottimo, howev er sto ricevendo il seguente errore (anche se la risposta è corretta in firebug) "SyntaxError: JSON.parse: carattere inatteso" ho provato a commentare il contentTupe (non sto recuperando json) e ho lo stesso problema. " – Ortal

+0

Ho modificato il codice perché mancava il segno +. Per favore, provalo ora. – tildy

1
  var param = "{'type': '" + type + "'}"; 
      var paramSfy = JSON.stringify({ type: type}) 
      var src = '/Physical_Inventory/Home/runZeroQtyDLIUpdate'; 
      $.ajax({ 
       type: "POST", 
       url: src, 
       dataType: "json", 
       contentType: "application/json; charset=utf-8", 
       data: paramSfy, 

Quello che ho notato è,

se si utilizza contentType: "application/json; charset = utf-8", quindi il dato è previsto come una stringa:

"{ "Param" : "Value" }" 

questo è meglio farlo usando la funzione JSON.stringify.

se non si imposta un tipo di contenuto, l'impostazione predefinita è "application/x-www-form-urlencoded; charset = UTF-8" Se si utilizza questo tipo di contenuto, il parametro e il valore vengono incorporati nell'URL, ei dati possono essere impostate in Ajax in questo modo:

data: {Param : Value}, 
Problemi correlati