jQuery发布JSON


192

更新:我想传递var value给服务器

你好,同一个老,同一个老... :)

我有一个名为的表格<form id="testForm" action="javascript:test()">和一个名为的代码区<code id="testArea"></code>

我正在使用以下代码来字符串化并在代码区域中显示数据:

var formData = form2object('testForm');
document.getElementById('testArea').innerHTML = JSON.stringify(formData, null, '\t');
var value = JSON.stringify(formData, null, '\t');

我想要的是将此数据发送到JSON文件。我一直在从事这个项目:http : //ridegrab.com/profile_old/,如果您按下Submit Query按钮,您将看到页面的顶部。

我也想用这段脚本来发送数据:

    function authenticate(userName, password) {
    $.ajax
    ({
        type: "POST",
        //the url where you want to sent the userName and password to
        url: 'username:password@link to the server/update',
        dataType: 'json',
        async: false,
        //json object to sent to the authentication url
        data: '{"userName": "' + userName + '", "password" : "' + password + '"}',
        success: function () {

        alert("Thanks!"); 
        }
    })
}

再次,我想要的是能够将JSON数据发送到服务器。我的服务器update or POST在正确的位置设置了数据。


我无法使其工作:)我不知道如何将它们放在一起以将该数据发送到服务器...即使我替换datadata: value,... !! ??
Patrioticcow

首先,您确定这不是连接问题吗?如果分配一个error函数,它会被调用吗?如果是这样,会有什么错误?
Wiseguy

1
尽管已经一年多了,但我会回答@Patrioticcow有关如何执行此操作的最新问题。您看到发送到ajax方法中的“成功”选项了吗?用“错误”做同样的事情。如“错误:MyErrorHandlingFunction”或“错误:function(error){[此处有错误处理代码]}”
vbullinger 2012年

Answers:


218

“数据”应为字符串化的JavaScript对象:

data: JSON.stringify({ "userName": userName, "password" : password })

要发送您的信息formData,请将其传递给stringify

data: JSON.stringify(formData)

某些服务器还需要application/json内容类型:

contentType: 'application/json'

这里还有一个类似问题的更详细的答案:Jquery Ajax将json发布到webservice


@tasos我想这就是您的追求:stackoverflow.com/questions/5806971/…–
凯尔·

在这里回荡不正确;对于简单的情况,这将可以正常工作,但是url编码的消息可能会非常有问题,尤其是对于数组的东西。
FMM 2012年

@FMM和Jonas N-你们可以帮我弄清楚如何更新我的答案以确保正确性吗?jQuery文档中的示例(在这里:api.jquery.com/jQuery.post)使它看起来好像可以发布JS对象或字符串一样,这使我相信jQuery将处理所有必要的字符串序列化。
凯尔·怀尔德

Patrioticcow说:“如果我想从var值发送json,该怎么办”,除非该值是数组或对象,否则它不是有效的JSON。
andsens 2012年

1
考虑一下当您的数据包含以下内容时会发生什么:{ foo: [1,2,3], bar: 'baz' }。这将被表单编码为foo%5B%5D=1&foo%5B%5D=2&foo%5B%5D=3&bar=baz(未转义,是foo[]=1&foo[]=2&foo[]=3&bar=baz)。可能不是您想要的服务器端。
FMM 2012年

270

您像这样发布JSON

$.ajax(url, {
    data : JSON.stringify(myJSObject),
    contentType : 'application/json',
    type : 'POST',
    ...

如果您将对象作为settings.data传递,则jQuery会将其转换为查询参数,默认情况下以数据类型application / x-www-form-urlencoded发送;charset = UTF-8,可能不是您想要的


@ TimLovell-Smith不会有所作为,因为jQuery data在任何情况下都不会处理字符串
Phil

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.