【问题标题】:System.ArgumentException: Invalid JSON primitive errorSystem.ArgumentException:无效的 JSON 原语错误
【发布时间】:2012-01-03 14:34:45
【问题描述】:

当我在以下代码中返回“sdata”时,我收到“System.ArgumentException:无效的 JSON 原语:pagenum”:

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

}

用户没有看到问题并且仍然返回了正确的数据,但是每次有人在生产中从我们的站点加载更多数据时,我都会收到一封错误电子邮件(在开发中不会发生,因此很难排除故障)。在萤火虫中检查时,我看到传递了正确的数据。那为什么我仍然收到此错误?!

关于为什么会发生这种情况的任何提示?

【问题讨论】:

标签: jquery asp.net-mvc json


【解决方案1】:
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格式。

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

【讨论】:

    【解决方案2】:
                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: "application/json; charset=utf-8" 那么数据应该是一个字符串:

    "{ "Param" : "Value" }"
    

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

    如果您未设置内容类型,则默认为“application/x-www-form-urlencoded; charset=UTF-8” 如果你使用这种内容类型,那么参数和值被嵌入到 url 中,并且可以像这样在 ajax 中设置数据:

    data: {Param : Value},
    

    【讨论】:

      【解决方案3】:

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

      我希望它有所帮助。

      【讨论】:

      • 很好,但是我收到以下错误(即使在萤火虫中的响应是正确的)
      • 抱歉,按 Enter 太快了:“太好了,但是我收到以下错误(即使在 firebug 中的响应是正确的)“SyntaxError: JSON.parse: unexpected character”我试着注释掉contentTupe(我没有返回 json)并且有同样的问题。”
      • 我编辑了代码,因为缺少 + 号。请立即尝试。
      猜你喜欢
      • 1970-01-01
      • 2015-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-18
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多