通过表单与 jquery/ajax 发送 json

Posted

技术标签:

【中文标题】通过表单与 jquery/ajax 发送 json【英文标题】:Sending json via form vs. jquery/ajax 【发布时间】:2013-03-04 13:02:05 【问题描述】:

我有一个简单的表单,我可以在其中使用 Asana 的 API 成功创建一个新项目

<form action="https://app.asana.com/api/1.0/projects" id="newProject" method="post" name="myform">
    <input id="name" name="name" type="text" value="">
    <input id="workspace" name="workspace" type="text" value="498346170860">
    <input id="new" type="submit" value="Send">
  </form>

这很好用。创建了一个项目,并在浏览器窗口中返回了 json 输出。

但是当我尝试使用 .post .ajax 方法时,我得到“请求数据必须是 JSON 对象,而不是 null”。例如(coffeescript):

$("form").submit ->
    $.post $(this).attr("action"), $(this).serialize(), ((jsonData) ->
        console.log jsonData
    ), "json"

【问题讨论】:

那是跨域的,所以你需要使用jsonp 或者在服务器端有某种可以向外部域发出请求的本地代理。 或者你可以用所有参数向你的服务器发出ajax请求,并通过你的服务器发出API请求 假设我禁用了浏览器安全等。它仍然无法工作?有没有办法提交上面的 html 表单,但在打开新标签页/页面之前捕获服务器的响应? 另外,Asana api 不支持 jsonp。 :// 【参考方案1】:

jQuery.support.cors = true; 放在您的跨域ajax 请求之上。 Read more about this.

另外,您可能需要指定 contentType "application/json"

【讨论】:

以上是关于通过表单与 jquery/ajax 发送 json的主要内容,如果未能解决你的问题,请参考以下文章

使用 JQuery AJAX 发送包含文件和附加 json 表单数据的 multipart/form-data

通过 jQuery.Ajax 向 MVC 控制器发送多个项目

jQuery Ajax 前端和后端数据交互的问题

通过 jquery ajax 发送结构化表单字段

如何使用 jQuery AJAX 和 JSON 通过 Bootbox 确认表单提交

通过 jQuery Ajax 发送 Json 数组