2012-01-03 38 views
5

que estoy recibiendo "System.ArgumentException: no válida JSON primitiva: pagenum" cuando regrese "sdata" en el siguiente código:System.ArgumentException: no válida JSON error primitiva

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

}

y la en función init 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); 
    } 
}); 

}

usuarios no ven un problema de una Y aún se devuelven los datos correctos, pero recibo un correo electrónico de error cada vez que alguien carga más datos de nuestro sitio en producción (esto no sucede en el desarrollo, por lo que es difícil solucionarlo). Al inspeccionar Firebug, veo que se pasan los datos correctos. Entonces, ¿por qué sigo recibiendo este error?

¿Algún consejo sobre por qué esto podría estar pasando?

+3

usted puede encontrar útil este mensaje si tienes curiosidad acerca de por qué el uso de 'JSON.stringify' resuelve el problema: http: // encosia. com/asmx-scriptservice-error-invalid-json-primitive/ –

Respuesta

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

pase sData en formato json, usando JSON.stringify para formatear datos en formato json.

Funciona en mi caso. Espero que funcione en tu caso.

0

jQuery serializa el parámetro de datos de $ .ajax() utilizando el esquema de codificación URL, independientemente de qué tipo de contenido se especifique. me recomiendan usar el tipo de contenido en 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); 
    } 
}); 

También es necesario utilizar las comillas en el parámetro de datos. En su versión, es un objeto literal JavaScript en lugar de cadena 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 +'}'; 
} 

Espero que ayude.

+0

genial, sin embargo me aparece el siguiente error (aunque la respuesta es correcta en firebug) – Ortal

+0

lo siento, pulse intro demasiado pronto: "genial, howev er, estoy obteniendo el siguiente error (aunque la respuesta es correcta en firebug) "SyntaxError: JSON.parse: carácter inesperado" intenté comentar el contenidoTupe (no estoy recuperando a json) y tengo el mismo problema. " – Ortal

+0

Edité el código, porque faltaba el signo +. Por favor, pruébalo ahora. – 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, 

Lo que noté es decir,

si está utilizando contentType: "application/json; charset = UTF-8", entonces se espera que los datos como una cadena:

"{ "Param" : "Value" }" 

este se logra mejor utilizando la función JSON.stringify.

si no establece un tipo de contenido, el valor predeterminado es "application/x-www-form-urlencoded; charset = UTF-8" Si usa este tipo de contenido, entonces el param y el valor están incrustados en la URL, y los datos se pueden establecer en el Ajax de este modo:

data: {Param : Value}, 
Cuestiones relacionadas