无效的JSON原语:id

Dev*_*ate 14 jquery web-services asmx

我无法使以下功能正常工作.这似乎是错误的序列化.这是关于不同数据变体的第5次迭代.我最初只是在做数据:{'id':id}就像我在使用WCF一样,但是使用ASMX它只是不起作用.看起来它将数据序列化为id = 1234而不是id:1234,但我对此很新.任何帮助,将不胜感激.哦,我可以直接在浏览器中调用该服务,它会正确返回数据,所以我知道它不是服务.

function getVentID(id) {
    //look up id in database and get VentID
    alert('id: ' + id);
    var jsdata = { "id": + id}
    $.ajax({
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        url: 'services/UserService.asmx/getVentID',
        data: jsdata,
        dataType: 'json',
        success: function (msg) {
            alert(msg.d);
        },
        error: function (a, b, c) {
            alert('Error: ' + a.toString() + ' ' + b.toString() + " " + c.toString());
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

ps我知道有10个相同的问题,但没有一个我能找到或者对我有用的答案.

sbl*_*lom 32

最简单的解决方法是将行开头更改var jsdata为:

var jsdata = '{id:' + id + '}';
Run Code Online (Sandbox Code Playgroud)

问题是jQuery将jsdata编码为表单数据,而不是json.该dataType参数会影响解析响应的方式,而不会影响POST数据的编码方式.

据我所知,jQuery中实际上没有任何JSON序列化代码.显然John Resig建议使用Douglas Crockford的json2.js.

要使用它,请向json.js添加脚本引用,然后:

var jstext = JSON.stringify(jsdata, null, 2);
Run Code Online (Sandbox Code Playgroud)