使用JQuery将JSON对象发送到服务器

44

我创建了一个需要在Jersey中发布的JSON。使用Grizzly运行的服务器有一个REST Web服务,可以接收传入的JSON对象,需要输出该对象。我正在尝试,但不确定如何正确实现。

import java.io.IOException;
import java.io.InputStream;

import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;

import org.apache.commons.io.IOUtils;

import javax.ws.rs.*;

    @Path("/helloworld")
    public class GetData {
        @GET
        @Consumes("application/json")
        public String getResource() {

            JSONObject obj = new JSONObject();
            String result = obj.getString("name");

            return result;      
        }                   

    } 

我有一个HTML文件,在加载时运行此方法。

    function sendData() {
        $.ajax({
                url: '/helloworld',
                type: 'POST',
                contentType: 'application/json',
                data: {
                    name:"Bob",


                },
                dataType: 'json'
            });
            alert("json posted!");
        };
2个回答

92

要向服务器发送json,首先必须创建json。

function sendData() {
    $.ajax({
        url: '/helloworld',
        type: 'POST',
        contentType: 'application/json',
        data: JSON.stringify({
            name:"Bob",
            ...
        }),
        dataType: 'json'
    });
}

以下是如何组织ajax请求以将json作为post变量发送的方法。

function sendData() {
    $.ajax({
        url: '/helloworld',
        type: 'POST',
        data: { json: JSON.stringify({
            name:"Bob",
            ...
        })},
        dataType: 'json'
    });
}

现在,json将会在json的post变量中。


谢谢!我还在弄清楚服务器如何获取JSON对象。 - nihulus
以这种方式发送时,json 将成为请求正文。如果您希望 json 放在 POST 变量中,则需要修改 ajax 请求。 - Kevin B
但如果我想将它作为Json对象呢?即假设我已经在jsp中创建了JSONObject,并想将其传递到下一页,那么如何在jquery POST中发送JSONObject(jsonobj)呢? - ajay_t
@Optimus 两种方式都可以通过POST请求发送JSONObject。第一种方式中,JSON字符串将在POST请求的请求体中,而第二种方式中,JSON字符串将在名为“json”的POST变量中。 - Kevin B
1
只是因为你的body解析器没有检测到它,所以才需要它。但是拥有它并不是一个坏主意。 - Kevin B
显示剩余2条评论

4

您也可以使用FormData()。但是您需要将contentType设置为false

var data = new FormData();
data.append('name', 'Bob'); 

function sendData() {
    $.ajax({
        url: '/helloworld',
        type: 'POST',
        contentType: false,
        data: data,
        dataType: 'json'
    });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接