System.ArgumentException:无效的JSON原语错误

时间:2012-01-03 14:34:46

标签: jquery asp.net-mvc json

当我在以下代码中返回“sdata”时,我收到“System.ArgumentException:Invalid JSON primitive: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 };
}

}

和pageload上的init函数:

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

}

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

有关为何可能发生这种情况的任何提示?

3 个答案:

答案 0 :(得分: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格式传递数据,使用JSON.stringify格式化json格式的数据。

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

答案 1 :(得分:3)

            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” 如果您使用此内容类型,则param和value将嵌入到url中,并且数据可以在ajax中设置,如下所示:

data: {Param : Value},

答案 2 :(得分:0)

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

您还需要在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 +'}';
}

我希望它有所帮助。