アプリ版:「スタンプのみでお礼する」機能のリリースについて

Ajax通信以外で、JavaScriptからPHPへ変数(配列)を渡したいのですが、
可能でしょうか?

下記のような状態の時、js変数dataを、Ajax通信を利用せずにPHP変数として取得したいのですが、どうすればよいでしょうか?
JavaScript関数の中で、PHPフォームの送信ボタンをクリックさせる(ような)ことは出来ないのでしょうか?

<button type="button" onclick="testsubmit();">送信</button>
<script>
function testsubmit(){
 js処理;
 var data = ★★;
}
</script>


■最終的にやりたいこと
・ボタンをクリックしたら、js処理で取得したjs変数(配列)を、Ajax通信を利用せずに、PHP変数として受け取りたい
・それを出来れば1クリックで処理したい

A 回答 (4件)

ボタンを押した後に画面が遷移していいのであれば



<button type="button" onclick="testsubmit();">送信</button>
<form action="xxx.php" method="post" name="jsform">
<input type="hidden" name="hoge" id="hoge" value="">
</form>
<script>
function testsubmit(){
 js処理;
 var data = ★★;
 document.getElementById('hoge').value = data;
 document.jsform.submit();
}
</script>
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

>document.getElementById('hoge').value = data;
>document.jsform.submit();
取得して、送信できるんですね。
大変参考になりましたー

お礼日時:2012/10/31 16:37

ANo3です。



私もよくわかってませんが、わかる範囲で・・・。
後は、他の方が訂正してくれるでしょう。


>1.scriptタグで、jsファイルではなく、phpファイルを指定しても良いのでしょうか
通常はjsファイルですが、phpなどでもかまいません。
sucriptタグの場合は、phpがスクリプトを返せばそのまま動作します。
imgタグの場合は、画像データを返せばそれが表示されます。


>2.使い方としては、location.href = url;で、遷移(もしくは更新?)させ
送信するのみという条件だと解釈しています。それなので、遷移は必要ありません。
遷移するのであれば、遷移先のuriを指定し(例えばhoge.php)、遷移先がソースをブラウザに返さないと表示できません。ご質問文では一方向の送信のみで、phpは送信を行はないのだと思いました。
(ANo2様の回答にその旨の確認が書いてあるかと思います)

使い方としては
function fuga(){
 ~~~
}
とでもしておいて、呼び出すだけです。
実際には、phpに渡すデータは状況によって変わるのでしょうから、その内容を引数にしておく必要がありますね。


>3.imgタグのsrcでなぜこのような(URLパラメータとして付与する)ことが可能なのでしょうか?
uriの仕様がそうなっているからです。
今回の場合は、送信先がphpなので、php側でパラメータとして読取れば、送信したことにできるということを利用しています。
ブラウザは画像データをリクエストしたつもりでいるはずですが…


>2.new Image();は何をしているのでしょうか?
イメージオブジェクトを生成しています。
document.createElement("img") と同等だと思います。


>このオブジェクト(?)の有効期間はブラウザを閉じるまで、ぐらいなのでしょうか?
上記で紹介したように、function fuga(){ ~~内で用いれば、その関数内の変数は関数の実行範囲内でのみ有効となりますので処理が終われば開放されるというしくみです。
(グローバル環境でオブジェクトを生成するとちょっと違ってきます)
ANo2様の回答と少し違うのはこの点で、ドキュメントに追加していないので何度関数を呼び出してもドキュメントは変わらないということになります。
まあ、No2様のようにscript要素を追加したとしても、どうということもないという意味では同じですが。


>3.new Image();で作成した「img」はDOMとは違うのでしょうか?
すみません。専門家ではないので、言葉遣いがよくわかっていませんです。

勝手な解釈では(正しいところはわかりません)、DOM要素ではあるものの、ドキュメントに追加はされていないということなのかも。
それなので、前述のように関数が終了した時点で開放されると思います。
もしかすると、画像データのレスポンスを待ち続けるのかも知れませんが、一定時間が過ぎれば打切られるはず。(画像のリンク切れと同じような処理になるかと)
    • good
    • 0
この回答へのお礼

回答ありがとうございました。

回答いただいた内容は、今回自分が知りたかったことに一番近かったわけではないのですが、
こういう使い方もできるんだ、と思うところがあり、大変参考になりましたー

お礼日時:2012/11/09 14:28

ANo2様と同じ発想ですが…



var url= "hoge.php?a=aaa&b=bbb";
var img = new Image();
img.src = url;

ドキュメントを変えないので、関数にしておけば何度呼び出してもDOMに影響しません。

この回答への補足

回答ありがとうございました。
おかげでやりたいことは実現できたのですが、分からないことがあるので、教えていただけないでしょうか?

1.No2さんの補足に書いた、「2」「3」の件

2.new Image();は何をしているのでしょうか? JavaScriptにImageクラスみたいなのがあって、それのインスタンスオブジェクトを作成しているような感じなのでしょうか? 試しに「location.href」させてもimgは利用できたのですが、このオブジェクト(?)の有効期間はブラウザを閉じるまで、ぐらいなのでしょうか?

3.new Image();で作成した「img」はDOMとは違うのでしょうか?

補足日時:2012/10/31 16:40
    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2012/11/09 14:28

PHP側で受け取るだけで良いのですよね(結果のデータは返さない)


var url= "hoge.php?a=aaa&b=bbb";
var s= document.createElement("script");
s.setAttribute("type","text/javascript");
s.setAttribute("src",url);
s.setAttribute("charset","UTF-8");
document.body.appendChild(s);
これでPHP側でデータを受け取れます。

この回答への補足

回答ありがとうございました。
おかげでやりたいことは実現できたのですが、分からないことがあるので、教えていただけないでしょうか?

1.scriptタグで、jsファイルではなく、phpファイルを指定しても良いのでしょうか?
<script type="text/javascript" src="hoge.php.php?a=aaa&b=bbb" charset="UTF-8"></script>

2.使い方としては、location.href = url;で、遷移(もしくは更新?)させ、$_GET["a"];で取得する感じでしょうか? location.hrefさせずに、取得する方法はあるでしょうか?

3.imgタグのsrcでなぜこのような(URLパラメータとして付与する)ことが可能なのでしょうか? そういう仕様だから? imgタグsrcの読み込まれる要件とかって、何かあるのでしょうか?

補足日時:2012/10/31 16:39
    • good
    • 0
この回答へのお礼

回答ありがとうございましたー

お礼日時:2012/11/09 14:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!