2013-08-22 40 views
3

我有一个html表单,该表单有两个字段(名称,说明)。当用户点击该表单的提交按钮时,我想以json格式提交表单数据。在HTML表单上发送JSON数据提交

我试过如下:

 function submitData(){ 
      payload.name = $("#project-name").val(); 
      payload.description = $("#project-description").val(); 

      $.post("http://localhost:5000/task-groups/add", payload); 
      return false; 
     } 

Submitdata点击我的窗体的按钮时被调用。但这是发送表单数据而不是json数据

我有一个python烧瓶服务器正在运行。

[1]当我做:

payload = request.get_json() 
name = payload['name'] 

它抛出以下异常

File "/Users/saik/projects/mturk/server/src/index.py", line 37, in add_task_group 
    name = payload['name'] 
TypeError: 'NoneType' object is not subscriptable 

[2]然而,我能够访问使用下列服务器端的数据:

name = request.form['name'] 

是否可以发送表单提交json数据,以便我可以使用[1]

我试图发送表单提交JSON数据的原因是因为我有一台服务器为命令行客户端提供REST API。我想使用相同的服务器和端点来为基于浏览器的客户端提供服务。

回答

0

您需要取消事件

$(function() { 
    $("form").on("submit",function(e) { 
    e.preventDefault(); // cancel the submission 
    $.post($(this).attr("action"),{ "name":$("#project-name").val(), "description":$("#project-description").val() }); 
    }); 
}); 

要发布JSON阅读Post JSON to Python CGI

+0

试过了。它仍然以表单数据形式发送 – user462455

+0

http://postimg.org/image/5gmo24okj/ – user462455

+0

http://postimg.org/image/y3kpeg1ot/ – user462455

0

我不知道......但我想传递的JSON是不是这样做的正确方法.. 。或者它只是“麻烦”地做...

为什么不只是这样做呢?!

payload = request.form 
name = payload['name'] 
4

有你需要的做派JSON与jQuery的AJAX调用服务器2两件事:

  • 请求负载应该是包含JSON有效载荷(不是一个JavaScript对象的字符串)

  • HTTP请求中的“Content-Type”标题应该设置为“application/json”。这让服务器知道请求有效载荷包含JSON数据。 $ .post为“Content-Type”标题使用“application/x-www-form-urlencoded”的默认值。 $ .ajax允许您通过“contentType”选项设置此标题。

试着改变你的代码如下:

$.ajax({ 
    type: 'POST', 
    url: 'http://localhost:5000/task-groups/add', 
    contentType: 'application/json', 
    dataType: 'json', 
    data: JSON.stringify(payload) 
}); 

注意$。员额都有一种数据类型的参数,但这种控制的“接受”请求头,它是用来表示首选格式对于响应

0

使用AJAX调用,您可以使用此代码发送成功:

<script> 
$(document).ready(function(){ 
$("#submitform").click(function(e) 
{ 
var MyForm = JSON.stringify($("#myform").serializeJSON()); 
console.log(MyForm); 
$.ajax(
{ 
url : "<your url>", 
type: "POST", 
data : MyForm, 

}); 
e.preventDefault(); //STOP default action 

}); 
}); 
</script>