ajaxを用いて、外部ホストにPOSTデータを送りたいのですが - PHPプロ!Q&A掲示板

3489

  • 300P

ajaxを用いて、外部ホストにPOSTデータを送りたいのですが

質問日時 / 2011年11月22日 21:02 (最終編集:11月22日 21:04)    回答数 / 5件

Questioner:  sensen  このエントリーをはてなブックマークに追加 

キーワード / ajax    jquery    post   

いつもお世話になっております。
タイトルのとおり、外部サーバーに対してPOST送信を行いたく、下記ソースを参考にしたのですが、どうしてもerrorになってしまいます。

参考URL:http://code.google.com/p/opensocial-jquery/wiki/Ajax
項目:外部ホストにデータを送信する

原因分かりますでしょうか。
ちなみに内部サーバーであればsuccessが返ります。
POST送信するサーバー、受信するサーバーも共にhttps内です。

下記が作ってみたソースコードです。

  1. $(function(){
  2.  
  3.   $('#sw').click(
  4.     function(){
  5.     var no = '777';
  6.     var name = 'hoge';
  7.     var mail = 'hoge@sample.com';
  8.     var data = {no:no, name:name, mail:mail};
  9.     $.ajax({
  10.     type: "POST",
  11.     url: "https://sample.com/test.php",
  12.     data: data,
  13.   dataType: 'json',
  14.     success: function() {
  15.     alert('success');
  16.       },
  17.     error: function() {
  18.     alert('error');
  19.       }
  20.     });
  21.   }
  22.   );
  23. });

dataType: 'json',をdataType: 'script',と記載するとsuccessになりますが、
実際はsuccessの結果になっていませんでした。
(postが成功すると自動返信が返ってくるので)

分かる方居ましたら是非教えてください

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01signalソーシャルアプリの開発中ということで間違いないです
┃┗A01-1sensen早速のご連絡ありがとうございました。 >ソーシャ
┃ ┗A01-1-1signalJavaScriptは外部サーバとの通信はできません なので
┃  ┗A01-1-1-1sensenご連絡遅くなって申し訳ございませんでした。 signal
┗A02kaitau参考urlにあるドキュメントをナナメ読みしましたが、

回答一覧

並び替え:

A01
answerersignal [11月23日 00:27]

ソーシャルアプリの開発中ということで間違いないですか?
そもそもPHPと全く関係ない話ですが、問題の切り分けはできていますか?
OpenSocialを利用したプラットフォーム上で確認していますか?

この意見に回答する

ツリーへ TOPへ

A01-1
replyersensen [11月23日 02:37]

早速のご連絡ありがとうございました。

>ソーシャルアプリの開発中ということで間違いないですか?

厳密には、https://www.jidoumail.com/のステップメール機能を使用したいのです。

上記URLのステップメールシステムを利用するには、

formのaction先に、指定したURL、名前などのパラメータとhiddenで指定したパラメータ値を送信することでステップメールを使用することができます。

しかし、今回action先(confirmページ)は別のページで表示させなくてはいけなくなったので、ステップメールの指定したURLへ遷移することは難しくなった次第であります。

名前などのパラメータとhiddenで指定したパラメータ値をステップメールのURLへPOSTしつつ、confirmへ遷移するには、上記のサンプルでは送ることはできないでしょうか。。。

この意見に回答する

ツリーへ TOPへ

A01-1-1 満足
replyersignal [11月23日 03:24] (最終編集:11月23日 03:36)

JavaScriptは外部サーバとの通信はできません
なのでJavaScript単体でどうにかしようというのは何があっても不可能です

単純にアスメルに遷移したくないと言う話であれば
ユーザーの入力を受け取ったら、PHPを使ってあなたが使ってるサーバから
アスメルに自動でログインするなりして送信させたらよいのではないでしょうか

--
1. ユーザーからの入力を受け取る
2. 確認画面を表示する
3. PHPを使ってアスメルにログインし入力内容を基に送信する
  (cURLを使ってもいいですし、fsockopenでも実装できます)
4. 結果画面を表示する

cURL
http://php.net/manual/ja/ref.curl.php

opensocial-jquery
https://groups.google.com/group/opensocial-japan/browse_thread/thread/943e3a12202b129e
読んでみれば理解できると思いますが通常使用を目的に作られていません

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyersensen [11月28日 15:08]

ご連絡遅くなって申し訳ございませんでした。
signalさんから頂いたcURLで無事解決いたしました。

>JavaScriptは外部サーバとの通信はできません
なのでJavaScript単体でどうにかしようというのは何があっても不可能です

知らなかったです。
サンプルを見たサイトだとjsを使って通信しているものだと思って、
てっきりデータを外部サーバにPOSTできるものだと思っていました。

なぜあのようなサンプルソースがあったのかは、kaitauの回答で解決しました。

取りあえず解決して良かったです。
ありがとうございました!!

この意見に回答する

ツリーへ TOPへ

A02 満足
answererkaitau [11月24日 09:39] (最終編集:11月24日 09:50)

参考urlにあるドキュメントをナナメ読みしましたが、
同urlで提示されているコードは jQuery ではなく、
そこから派生させた opensocial-jquery.js という
独自のライブラリを前提と作られているようです。
(ちなみに、元となってるjQueryのバージョンもちょっと古いです)

さらに、推測ですがこのライブラリは OpenSocialHost
というものに登録し、決められた手続きに従って gadgets なる
ものを作成し、同サービスのホスティングを前提としているのでは
ないでしょうか。
signalさんも書かれていますが、javascriptは同一生成元ポリシーによって
外部へのリクエストは行わない仕様になっています。
おそらく件のライブラリは、ガジェットで指定されたサーバ側で signal さんが
提示されたような処理を行っているものと思われますが、仮にここを利用する事を
前提にするなら、他者が提供するサービスと同一ドメインに同居する
事になると思われます。
(※実際には試していません。文書を読んだ上での予測)

これ以上の詳しい言及は避けますが、元々が特殊な条件で成り立っている
仕様な上、第三者が利用するために十分なサービスかどうか判定はしかねるため、
内部で自前で実装する方が無難でしょう。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
セッションがいいのか、それともデータベースがいいのか教えて下さい。
 このエントリーをはてなブックマークに追加 
A
>ボタンをクリックしたら選んだ商品情報を持っておきたいと思っています。 そのくらいのことならセッションもしくはCookie(期限短め:場合によってはブラウザ閉じるまで)でいいんじゃないですかね。 #わ...

>>続きを読む

一つの目安として、ECサイトの購入情報など絶対に消えてはいけないものはDBに、カートなどの一時的に使用する情報や、ユーザに任意のタイミングで消去されても構わないものはセッションにと使い分けるといいでしょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)