こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

-広告-

締切り済みの質問

cakephpでPOST(ajax)データを取得

Cakephpからajaxでポストされたファイルデータをデータベースに保管したいのですが
ポストの中身が取得できなくて困っています。自分なりに調査したのですが
結局パケットをキャプチャしてみても解決しないままです。
以下の二つにさほど違いはないように思えるのですが何が原因でしょうか?
必要な情報があれば補足いたします。

Cakephpの$this->request->dataからポストデータが正常に取得できるリクエスト

POST /images/add HTTP/1.1
Host: yahoo.yahoo.yahoo
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://yahoo.yahoo.yahoo/Administrators/makeTitleData
Cookie: CAKEPHP=5d7cd855ad316267673b8a20e5fbcf9c
Connection: keep-alive
Content-Type: multipart/form-data; boundary=---------------------------199552540520686
Content-Length: 964

-----------------------------199552540520686
Content-Disposition: form-data; name="_method"

POST
-----------------------------199552540520686
Content-Disposition: form-data; name="data[Image][name]"; filename=""
Content-Type: application/octet-stream


-----------------------------199552540520686
Content-Disposition: form-data; name="image"


-----------------------------199552540520686
Content-Disposition: form-data; name="data[Image][contents]"


-----------------------------199552540520686
Content-Disposition: form-data; name="data[Image][moto_filename]"


-----------------------------199552540520686
Content-Disposition: form-data; name="data[Image][filetype]"


-----------------------------199552540520686
Content-Disposition: form-data; name="data[Image][filesize]"


-----------------------------199552540520686
Content-Disposition: form-data; name="btnSave"

......
-----------------------------199552540520686--

Cakephpの$this ->request->dataでポストデータが取得できないリクエスト
prの出力は空配列→array()(ajax+FormDataオブジェクトにて生成されたリクエスト)

POST /Images/add HTTP/1.1
Host: yahoo.yahoo.yahoo
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
Accept: */*
Accept-Language: ja,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type: false
X-Requested-With: XMLHttpRequest
Referer: http://yahoo.yahoo.yahoo/Administrators/makeTitleData
Content-Length: 572
Cookie: CAKEPHP=5d7cd855ad316267673b8a20e5fbcf9c
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache

-----------------------------243202103330754
Content-Disposition: form-data; name="filename"

a.txt
-----------------------------243202103330754
Content-Disposition: form-data; name="contents"

aaa
-----------------------------243202103330754
Content-Disposition: form-data; name="moto_filename"

b.txt
-----------------------------243202103330754
Content-Disposition: form-data; name="filetype"

image/jpg
-----------------------------243202103330754
Content-Disposition: form-data; name="filesize"

10
-----------------------------243202103330754--

何がいけないのでしょうか・・。
よろしくお願いいたします。ご回答お待ちしております。

投稿日時 - 2015-09-28 18:08:45

QNo.9055337

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

-広告-
-広告-

回答(1)

ANo.1

見ればわかるように、全然違いますが……。form-dataのnameをよく見て下さい。正常に遅れているものは、data[Image]内に配列としてデータが格納されています。受け取れないものは、単に項目名がnameに指定されているだけですね。

Ajaxで、ということですが、Ajaxを使わずPOSTで送信しているときは、フォームヘルパーを使ってフォームを生成しているんじゃありませんか。そして受け取るコントローラー側では、送られたフォームをrequest->dataでまるごと取り出す、という形ですね。

フォームヘルパーは、指定した名前でフォームタグを生成しているわけではありません。フォーム内の項目をdata配列内に組み込むような形でそれぞれのタグのnameが命名されています。試しにフォームのあるページにアクセスして、ページのソースをチェックしてフォーム内の項目がどんなnameになっているのかを調べてみると良いでしょう。そのフォームの命名にきっちりとあわせて送信データを用意しなければ正しくデータは受け取れません。

投稿日時 - 2015-09-28 21:21:51

補足

早速のご回答ありがとうございます。なるほど確かにname属性が違いますね。ポストデータの取得にまで命名規則があるとは思いませんでした。

実は一度そこも一か所のneme属性を変えてためしたつもりだったんですがその時はうまくいかなかったので違うのかなと思ってしまいました。おかげさまで修正の方向性と光明が見えてきた気がします。

すぐにはテストできないのですが後ほどコードを書き換えて再チャレンジしたいと思います。結果は再度お礼欄でご報告させていただきます。

取り急ぎお礼をしたく書き込んでおります。ありがとうございました。

投稿日時 - 2015-09-29 18:41:49

-広告-
-広告-
-広告-
-広告-
-広告-