如何格式化AJAX POST请求与cURL?

时间:2014-09-29 22:09:00

标签: java jquery ajax json servlets

我发送了一个POST请求cia cURL,在我的Java服务器中解析它时,没问题。

卷曲-H"内容类型:application / json" -d' {" url":" http://example.com"}' http://example-server.com/pathtoserver

我通过以下方式抓取Java中的请求:

StringBuilder buffer = new StringBuilder();
BufferedReader reader = request.getReader();
String line;

while ((line = reader.readLine()) != null) {
    buffer.append(line);
}

String data = buffer.toString();

if (logger.isInfoEnabled()) {
    logger.info("Data grabbed for POST data: " + data);
}

日志声明是:

2014-09-29 16:29:19,153 [INFO] [pool-16-thread-16] LOG - Data grabbed for POST data: {"url":"http:example.com"}

但是当我通过JQUERY AJAX请求发送它时,我收到一个JSONException错误。我将请求格式化错误了吗?

$('#validate').click(function() {
    alert($('#url').val());
    console.log($('#url').val());
    $.ajax(
        {url: "/pathtoserver/",
         type: "POST",
         data: {url:$('#url').val()},
         success: function(data) { handleValidateResponse(data); console.log(data); }
        });
    });

日志还说明:

2014-09-29 16:27:08,145 [INFO] [pool-16-thread-14] LOG - Data grabbed for POST data: url=http%3A%2F%2Fexample.com

现在对URL进行编码,而不是像第一个那样使用大括号({url:...})的JSON对象,它说" url = ..."

cURL与AJAX帖子请求有什么本质上的不同吗?或者我格式化错了什么?

1 个答案:

答案 0 :(得分:1)

您需要手动将对象字符串化为JSON。 jQuery会将你的对象转换为一串键/值对。我还会添加contentType: "application/json"仅用于安全措施:

$.ajax(
    {url: "/pathtoserver/",
     type: "POST",
     contentType: "application/json",
     data: JSON.stringify({url:$('#url').val()}),
     success: function(data) { handleValidateResponse(data); console.log(data); }
    });