2012-01-03 66 views
5

我收到 “System.ArgumentException:无效的JSON原始:页次” 当我在下面的代码返回 “SDATA”:System.ArgumentException:无效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 }; 
} 

}

和在页面加载初始化函数:

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

}

用户不明白的一个问题nd仍然会返回正确的数据,但每当有人在生产中从我们的网站加载更多数据时,我都会收到一封错误电子邮件(在开发过程中没有发生,因此很难排除故障)。在检查萤火虫时,我看到正确的数据已通过。那么,为什么我仍然得到这个错误?!

任何提示,为什么这可能会发生?

+3

如果您对使用'JSON.stringify'解决问题的原因感兴趣:http:// encosia。 com/asmx-scriptservice-errors-invalid-json-primitive/ – 2012-08-16 20:17:09

回答

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

以json格式传递sData,使用JSON.stringify格式化json格式的数据。

它适用于我的情况。希望它适用于你的情况。

0

无论指定什么Content-Type,jQuery都会使用URL编码方案序列化$ .ajax()的数据参数。 我建议在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); 
    } 
}); 

而且你需要在数据参数使用引号。在您的版本中,它是JavaScript对象字面值而不是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 +'}'; 
} 

我希望它有帮助。

+0

很好,但是我收到以下错误(即使响应在萤火虫中是正确的) – Ortal 2012-01-03 17:58:29

+0

抱歉,请输入太快: “great,howev呃,我收到以下错误(即使在萤火虫中的响应是正确的)“SyntaxError:JSON.parse:意外字符” 我试着注释掉contentTupe(我没有收到json回来)并且有同样的问题。 – Ortal 2012-01-03 18:04:05

+0

我编辑了代码,因为+符号丢失了。请现在尝试一下。 – tildy 2012-01-04 10:30:09

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, 

我注意到的是,

如果你正在使用的contentType: “应用/ JSON的;字符集= UTF-8”,那么该数据有望为一个字符串:

"{ "Param" : "Value" }" 

这最好通过使用JSON.stringify函数来完成。

如果不设置内容类型,则默认的是,“应用程序/ X WWW的窗体-urlencoded;字符集= UTF-8”如果使用此内容类型 ,则PARAM和值是嵌入式到数据可以像这样在ajax中设置:

data: {Param : Value}, 
相关问题