使用Ajax / jquery发布不正确的json有效负载

时间:2013-08-26 20:31:02

标签: javascript jquery ajax json

我正在尝试做一些简单的事情,但我显然错过了一些东西。我想使用json将表单中的数据发布到Web服务中。简单吧?

我有我的HTML

    <div id="addDiv">
    <form id="addItemForm">
        <fieldset>
            <label for="title">Title</label> 
            <input id="title" class="txt" type="text" name="title"/></BR>

            <label for="url">URL</label> 
            <input id="url" class="txt" type="text" name="url"/></BR>

            <label for="author">Author</label> 
            <input id="author" class="txt" type="text" name="author"/>

        </fieldset>
    </form>
</div>

然后在我的js文件中执行:

              JSONdata = JSON.stringify($('#addItemForm').serialize());
          console.log("Form transformed to: " + JSONdata);

有效负载输出(JSONdata):

Form transformed to: "title=tgtg&url=5rfrf&author=yhyhyyh"

我的Ajax代码以防万一:

    $.ajax({
    type: "POST",
    url: serviceUrl,
    dataType: 'json',
    data: JSONdata,
    contentType : 'application/json',
            ............

所以我看到的问题是json字符串不是[{ "title": "tgtg", "url": "5rfrf" .... },{...}]

之类的有效字符串

因此,我的服务失败 我尝试过使用REST测试仪并且该服务没有问题,问题是当我尝试通过jquery.发布时

我也尝试使用serializeArray(),但我得到的其他有效负载也不正确:

[{"name":"title","value":"tgtg"},{"name":"url","value":"5rfrf"},...]

换句话说,我找不到通过帖子创建正确的json字符串的方法。

先谢谢了!

1 个答案:

答案 0 :(得分:1)

您不想使用serialize,而是使用serializeArray method。如果您在对象中需要它,那么您仍然可以创建对象的name - value对属性:

var res = {},
    arr = $('#addItemForm').serializeArray();
for (var i=0; i<arr.length; i++)
    res[arr[i].name] = arr[i].value;