2012-01-19 43 views
1

JSON形式のデータを必要とするリモートAPIと通信しようとしています。私たちは、次のようにjQueryのを使用して、これを提出しようとしましたが、SOPのエラーを取得した。ColdFusion 9を使用してJSONをリモートURLにPOSTする方法は?

<script type="text/javascript"> 
    $.ajax({ 
    username: 'username', 
    password: 'password', 
    url: "https://api.e2ma.net/123/members/add", 
    dataType: 'json', 
    type: 'POST', 
    data: 
    { 
     "fields": { 
     "name_first": "Name" 
    }, 
    "email": "[email protected]" 
    } 
    }); 
</script> 

は残念ながら、彼らのAPI はないサポートJSONPを行います。

このJSONデータをColdFusion 9からリモートAPIに直接投稿するにはどうすればよいですか?

さらに、には、そのAPIから応答を解析する必要がありますか?ここで

は、ドキュメントへのリンクです:

import_single_member(account_id) 
POST /#account_id/members/add 

Adds or updates an audience member 

Parameters: 

    email (string) – Email address of member to add or update 
    fields (dictionary) – Names and values of user-defined fields to update 
    group_ids (integer) – Optional. Add imported members to this list of groups. 
    signup_form_id – Optional. Indicate that this member used a particular signup form. 

Returns:  
    The member_id of the new or updated member, and whether the member was added or an existing member was updated 

Example: 

POST /123/members/add 
{ 
    "fields": { 
    "first_name": "Benjamin" 
    }, 
    "email": "[email protected]" 
} 

{ 
    "added": true, 
    "member_id": 1024 
} 

ありがとう:http://myemma.com/api-docs/

そして、ここでは簡単なのスニペットは、これらのドキュメントから新しいメンバーの呼び出しを追加しています。

+0

あなたはセットアップにリモートJSONデータをつかむサーバー上のプロキシをしたい、あなたは、あなたのローカルプロキシを呼び出す:

また、あなたがポストを行った後、あなたがこのようにJavaScriptに戻って得るものは何でも返すことができますJavaScriptを使用してリモートデータを取得し、ブラウザに返します。 jQueryは、 '$ .parseJSON()'でJSONをデコードする機能を提供します。あなたのプロキシは、クロスドメイン・ポリシーの問題を避けるために、JavaScriptとリモート・サービスの仲介役として機能します。 – Jasper

+0

このJSONデータをCF内から直接ポストすることで、JQuery/JSをスキップする方法(それによってプロキシが必要)はありませんか? –

+0

確かに、リモートデータをCFで取得し、必要な形式で出力するだけです。 JavaScriptの部分については、jQueryでタグ付けしたので説明しました。 JavaScriptを使用しないと、新しいデータを取得するためにページ全体をリロードする必要があります。サーバーサイドスクリプトのみを使用するのは面倒です。 – Jasper

答えて

1

JavaScriptから別のサーバーにPOSTできないため、プロキシを構築する必要があります。あなたのJSコードは次のようになります。

$.ajax({ 
url: "https://yourserver/proxy.cfm", 
dataType: 'json', 
type: 'POST', 
data: 
"name_first": "Name", 
"email": "[email protected]" 
} 
}); 

そして、あなたのColdFusionコードは次のようなものになります。

<cfhttp url="https://api.e2ma.net/123/members/add" method="post" username="username" password="password"> 
    <cfhttpparam name="email" value="#form.email#"> 
    <cfhttpparam name="fields" value='{"name_first":"#form.name_first#"}'> 
</cfhhtp> 

を私はフィールドが必要な形式になりますかどうかわからないんだけど、TIがあるべきかなり近い。

<cfoutput>#cfhttp.filecontent#<cfoutput> 
+0

さて、cfhttpを使用する必要があります。その場合、可能な限りモジュール化するために、proxy.cfm内の異なるcfhttp呼び出しを指す別のメソッドをajax呼び出しで指定できますか? 1つは追加用、1つは削除用などです。 –

+0

簡単にするために、cfswitchを使用して、使用する必要がある各メソッドについてケースを持つことができます。また、ColdFusionコードを一般的なものにして、渡す必要があるものだけを受け取り、他のサーバーに転送することもできます。しかし、他のサーバのAPIや、どのようなタイプのフィールドやコレクションがあるのか​​分からなければ、私はそこから始めたくないでしょう。 –

関連する問題