Submitting POST form data from a Titanium Mobile App to a Ruby on Rails Web App -
i'm trying submit form data titanium mobile app ruby on rails web app. post multipart request includes basic data , image.
i show different ways i've tried submit data, , errors ror log.
some details:
- the image
problem[avatar]comes phone camera. - the following code common snippets below. comes before snippets.
common code
var url = "http://some_ror_app.herokuapp.com/problems"; var client = ti.network.createhttpclient({ // function called when response data available onload : function(e) { alert('success'); }, // function called when error occurs, including timeout onerror : function(e) { alert('error'); }, timeout : 60 * 1000 }); way #1
titanium
i have saved form data inside variable, , passed on variable send() function.
var params = { 'problem[avatar]': $.report_image_view.reportphoto.toimage(), // returns [ti.blob] object 'problem[title]': $.report_title_view.title.value, 'problem[description]': $.report_description_view.description.value, 'problem[ptype]': $.report_type_view.report_type.value['valueid'], 'problem[status]': 1, 'problem[priority]': 2, 'problem[latitude]': latitude, 'problem[longitude]': longitude, 'problem[user_id]': 2 } // prepare connection. client.open("post", url); client.send(params); ror log
013-09-04t18:30:54.048412+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 18:30:54 +0000 2013-09-04t18:30:54.248656+00:00 app[web.1]: processing problemscontroller#create multipart_form 2013-09-04t18:30:54.248656+00:00 app[web.1]: [paperclip] saving attachments. 2013-09-04t18:30:54.248656+00:00 app[web.1]: redirected https://km7.herokuapp.com/problems/32 2013-09-04t18:30:54.248656+00:00 app[web.1]: completed 302 found in 194ms (activerecord: 80.2ms) 2013-09-04t18:30:54.252433+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=208ms status=302 bytes=103 2013-09-04t18:30:55.157538+00:00 app[web.1]: started post "/problems/32" 111.222.333.444 @ 2013-09-04 18:30:55 +0000 result
the post done, not intended. new record added database, empty. in other words, image not uploaded, title empty, , description, coordinates, , else. timestamp , (object) id set.
way #2
titanium
what have done is, instead of saving form data inside variable, , passing on variable, i've created object form data parameter pass function.
client.open("post", url); client.send({ "problem[avatar]" : $.report_image_view.reportphoto.toimage(), // returns [ti.blob] object "problem[title]" : $.report_title_view.title.value, "problem[description]" : $.report_description_view.description.value, "problem[ptype]" : $.report_type_view.report_type["valueid"], "problem[status]" : 1, "problem[priority]" : 2, "problem[latitude]" : latitude, "problem[longitude]" : longitude, "problem[user_id]" : 2 }); ror log
2013-09-04t18:48:48.328758+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 18:48:48 +0000 2013-09-04t18:48:48.635395+00:00 app[web.1]: processing problemscontroller#create multipart_form 2013-09-04t18:48:48.635395+00:00 app[web.1]: [paperclip] saving attachments. 2013-09-04t18:48:48.635395+00:00 app[web.1]: redirected https://km7.herokuapp.com/problems/34 2013-09-04t18:48:48.635395+00:00 app[web.1]: completed 302 found in 299ms (activerecord: 66.1ms) 2013-09-04t18:48:48.644302+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=325ms status=302 bytes=103 result
exactly before. post done, not intended. new record added database, empty.
way #3
titanium
this time passing string parameters passed if get. however, cannot pass image in way...or can i?
var post_data = "problem[title]=report rest client&problem[latitude]=18.09&problem[longitude]=-67.12&problem[ptype]=1&problem[status]=1&problem[priority]=2&problem[description]=test description rest client&problem[user_id]=2&problem[address]=123 main street, pr"; // prepare connection. client.open("post", url); client.send(post_data); ror log
i don't know why keeps redirecting me /problems on , on until gives up.
2013-09-04t19:03:30.982008+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=10ms status=307 bytes=0 2013-09-04t19:03:36.415999+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 19:03:36 +0000 2013-09-04t19:03:36.475568+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=1ms service=64ms status=302 bytes=100 2013-09-04t19:03:36.476626+00:00 app[web.1]: processing problemscontroller#create js 2013-09-04t19:03:36.476626+00:00 app[web.1]: parameters: {"problem"=>{"title"=>"report rest client", "latitude"=>"18.09", "longitude"=>"-67.12", "ptype"=>"1", "status"=>"1", "priority"=>"2", "description"=>"test description rest client", "user_id"=>"2", "address"=>"calle 3, bo. coto sur"}} 2013-09-04t19:03:36.476626+00:00 app[web.1]: redirected https://some_ror_app.herokuapp.com/problems 2013-09-04t19:03:36.476626+00:00 app[web.1]: completed 302 found in 54ms (activerecord: 26.1ms) 2013-09-04t19:03:37.428602+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 19:03:37 +0000 2013-09-04t19:03:37.532547+00:00 app[web.1]: processing problemscontroller#create js 2013-09-04t19:03:37.532547+00:00 app[web.1]: parameters: {"problem"=>{"title"=>"report rest client", "latitude"=>"18.09", "longitude"=>"-67.12", "ptype"=>"1", "status"=>"1", "priority"=>"2", "description"=>"test description rest client", "user_id"=>"2", "address"=>"calle 3, bo. coto sur"}} 2013-09-04t19:03:37.532547+00:00 app[web.1]: redirected https://some_ror_app.herokuapp.com/problems 2013-09-04t19:03:37.532547+00:00 app[web.1]: completed 302 found in 92ms (activerecord: 61.0ms) 2013-09-04t19:03:38.457108+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=84ms status=302 bytes=100 2013-09-04t19:03:38.378766+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 19:03:38 +0000 2013-09-04t19:03:38.455542+00:00 app[web.1]: processing problemscontroller#create js 2013-09-04t19:03:38.455542+00:00 app[web.1]: parameters: {"problem"=>{"title"=>"report rest client", "latitude"=>"18.09", "longitude"=>"-67.12", "ptype"=>"1", "status"=>"1", "priority"=>"2", "description"=>"test description rest client", "user_id"=>"2", "address"=>"calle 3, bo. coto sur"}} 2013-09-04t19:03:38.455542+00:00 app[web.1]: redirected https://some_ror_app.herokuapp.com/problems 2013-09-04t19:03:38.455542+00:00 app[web.1]: completed 302 found in 67ms (activerecord: 48.9ms) 2013-09-04t19:03:39.319540+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 19:03:39 +0000 2013-09-04t19:03:39.361228+00:00 app[web.1]: processing problemscontroller#create js 2013-09-04t19:03:39.361228+00:00 app[web.1]: parameters: {"problem"=>{"title"=>"report rest client", "latitude"=>"18.09", "longitude"=>"-67.12", "ptype"=>"1", "status"=>"1", "priority"=>"2", "description"=>"test description rest client", "user_id"=>"2", "address"=>"calle 3, bo. coto sur"}} 2013-09-04t19:03:39.361228+00:00 app[web.1]: redirected https://some_ror_app.herokuapp.com/problems 2013-09-04t19:03:39.361228+00:00 app[web.1]: completed 302 found in 38ms (activerecord: 22.6ms) 2013-09-04t19:03:39.630525+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 19:03:39 +0000 2013-09-04t19:03:39.731993+00:00 app[web.1]: processing problemscontroller#create js 2013-09-04t19:03:39.731993+00:00 app[web.1]: parameters: {"problem"=>{"title"=>"report rest client", "latitude"=>"18.09", "longitude"=>"-67.12", "ptype"=>"1", "status"=>"1", "priority"=>"2", "description"=>"test description rest client", "user_id"=>"2", "address"=>"calle 3, bo. coto sur"}} 2013-09-04t19:03:39.731993+00:00 app[web.1]: redirected https://some_ror_app.herokuapp.com/problems 2013-09-04t19:03:39.731993+00:00 app[web.1]: completed 302 found in 84ms (activerecord: 37.1ms) 2013-09-04t19:03:39.741297+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=117ms status=302 bytes=100 result
i don't see changes in database. nothing saved.
way #4
titanium
this time organize params object in different way. otherwise, similar way #1
var params = { problem : { avatar : $.report_image_view.reportphoto.toimage(), title : $.report_title_view.title.value, description : $.report_description_view.description.value, ptype : $.report_type_view.report_type.value['valueid'], status : 1, priority : 2, latitude : latitude, longitude : longitude, user_id : 2 }} // prepare connection. client.open("post", url); client.send(params); ror log
2013-09-04t19:19:38.381670+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=4ms service=11ms status=307 bytes=0 2013-09-04t19:19:41.117687+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 19:19:41 +0000 2013-09-04t19:19:41.162099+00:00 app[web.1]: nomethoderror (undefined method `stringify_keys' #<string:0x00000003672638>): 2013-09-04t19:19:41.162099+00:00 app[web.1]: app/controllers/problems_controller.rb:29:in `new' 2013-09-04t19:19:41.162099+00:00 app[web.1]: app/controllers/problems_controller.rb:29:in `create' 2013-09-04t19:19:41.162099+00:00 app[web.1]: 2013-09-04t19:19:41.162099+00:00 app[web.1]: 2013-09-04t19:19:41.162726+00:00 app[web.1]: processing problemscontroller#create url_encoded_form 2013-09-04t19:19:41.162726+00:00 app[web.1]: parameters: {"problem"=>"{\n avatar = \"[object tiblob]\";\n description = \"enter description\";\n latitude = \"37.33159255981445\";\n longitude = \"-122.0305099487305\";\n priority = 2;\n status = 1;\n title = \"a test title\";\n \"user_id\" = 2;\n}"} 2013-09-04t19:19:41.162726+00:00 app[web.1]: completed 500 internal server error in 39ms 2013-09-04t19:19:41.164682+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=50ms status=500 bytes=643 result nothing saved in database. however, time explicitly produced nomethoderror in new , create methods of problems controller.
way #5
titanium
this time i'm creating object in way #4 passing directly send() method parameter, in way #3.
// prepare connection. client.open("post", url); client.send({ problem : { avatar : $.report_image_view.reportphoto.toimage(), title : $.report_title_view.title.value, description : $.report_description_view.description.value, ptype : $.report_type_view.report_type.value['valueid'], status : 1, priority : 2, latitude : latitude, longitude : longitude, user_id : 2 }}); ror log
2013-09-04t20:16:36.865831+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=3ms status=307 bytes=0 2013-09-04t20:16:38.772048+00:00 app[web.1]: started post "/problems" 111.222.333.444 @ 2013-09-04 20:16:38 +0000 2013-09-04t20:16:38.808102+00:00 app[web.1]: nomethoderror (undefined method `stringify_keys' #<string:0x00000005d45f58>): 2013-09-04t20:16:38.808102+00:00 app[web.1]: app/controllers/problems_controller.rb:29:in `new' 2013-09-04t20:16:38.808102+00:00 app[web.1]: app/controllers/problems_controller.rb:29:in `create' 2013-09-04t20:16:38.808102+00:00 app[web.1]: 2013-09-04t20:16:38.808102+00:00 app[web.1]: 2013-09-04t20:16:38.808786+00:00 app[web.1]: processing problemscontroller#create url_encoded_form 2013-09-04t20:16:38.808786+00:00 app[web.1]: parameters: {"problem"=>"{\n avatar = \"[object tiblob]\";\n description = \"fix asap.\";\n latitude = \"37.33069610595703\";\n longitude = \"-122.0306701660156\";\n priority = 2;\n status = 1;\n title = \"a broken water pipe\";\n \"user_id\" = 2;\n}"} 2013-09-04t20:16:38.808786+00:00 app[web.1]: completed 500 internal server error in 30ms 2013-09-04t20:16:38.809384+00:00 heroku[router]: at=info method=post path=/problems host=some_ror_app.herokuapp.com fwd="111.222.333.444" dyno=web.1 connect=2ms service=41ms status=500 bytes=643 result
same errors way #4
this has been driving me crazy.
do know doing wrong? how can fix this? i'll happy answer questions me. leave comment.
try adding :
client.setrequestheader('enctype', 'multipart/form-data');
before open function.
Comments
Post a Comment