我需要将JSON数据发送到远程API.显然,由于SOP问题,我无法使用jQuery,远程API不支持JSONP.
我也不想使用任何类型的代理来绕过SOP限制.
根据api文档(http://myemma.com/api-docs/),这是他们期望的数据的格式(请求和响应数据以JSON传输):
POST https://api.e2ma.net//123/members/add { "fields": { "first_name": "myFirstName" },"email": "email@domain.com" }
这是我迄今为止所建立的,但仍然从远程API接收“无法解析JSON”错误:
<cfset fields[name_first]="#SerializeJSON( "myFirstName" )#" /> <cfset form.email="#SerializeJSON( "email@domain.com" )#" /> <cfhttp url="https://api.e2ma.net/123/members/add" method="POST" username="username" password="pssword" useragent="#CGI.http_user_agent#" result="objGet"> <!--- add email ---> <cfhttpparam type="formfield" name="email" value='#form.email#' /> <!--- add field: name_first ---> <cfhttpparam type="formfield" name="fields" value='#fields[name_first]#' /> </cfhttp> <cfoutput>#objGet.FileContent#</cfoutput>
再次,我肯定会以某种方式破坏我的数据结构,但我不知道我做错了什么,特别是在正确设置“fields”:{“first_name”:“myFirstName”}结构/数组时.
解决方法
<cfset stFields = { "fields" = { "first_name" = "myFirstName" },"email" = "email@domain.com" }> <cfhttp url="http://api.url.com" method="post" result="httpResp" timeout="60"> <cfhttpparam type="header" name="Content-Type" value="application/json" /> <cfhttpparam type="body" value="#serializeJSON(stFields)#"> </cfhttp>
更新10/26/13
对于我最近一直在使用API的所有工作,我想我会更新一个简单的方法来自动化我发现的这个套管.我使用了JSON Util图书馆和Ben Nadel的JSON Serializer Utility CFC 的组合来完成所有回报的更好的序列化一致性.
以下是我如何实现这一点的示例GIST.
https://gist.github.com/timmaybrown/7226809
当我在我的项目中转变为使用持久性实体CFC时,我发现使用我自己的子CFC方法扩展了Ben Nadel的序列化器CFC,它使用getComponentMetaData()函数循环我所有的持久cfc属性,以构建不同键的结构,套管用于序列化.该方法允许我的api自动继承我的实体中的属性名称的外壳,非常有用.在重新启动时有一点开销,但是非常值得保持您的API在您的API中保持一致.
更新9/8/16Re:我上面关于一致的套管.我已经在我的数据库中针对较新的项目倾向于不同的列命名约定,所以我不必与很多这些问题进行斗争. first_name而不是firstName等
原文地址:https://www.jb51.cc/js/152492.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。