2012-04-27 12 views
1

私はRuby-on-Railsで作業しています。 JSONリクエストでフォームを送信しようとしています。コンソールでgetJSONでフォームを送信しても成功しない

HTML

<%= form_tag widgets_user_path(:format => "json"), :id => "testjsonform" do %> 
     <input type="checkbox" name="cat[]" value="math" id="sub1" class="left"> 
     <label for="sub1" class="laa">Math</label> 
     <input type="checkbox" name="cat[]" value="history" id="sub2" class="left"> 
     <label for="sub2" class="laa">History</label> 
     <input type="checkbox" name="cat[]" value="science" id="sub3" class="left"> 
     <label for="sub3" class="laa">Science</label> 
     <%= hidden_field_tag 'callback', "?" %> 
     <div><%= submit_tag 'JSON', :id => "testjson" %></div> 
<% end %> 

application.js

$("#testjsonform").live("submit", function() { 
    $.getJSON($(this).attr("action"),$(this).serialize(), function(data) { 
     alert("success"); 
    }) 
    .success(function() { 
     alert("success"); 
    }) 
    .error(function() { 
     alert("error"); 
    }); 
    return false; 
}); 

それは(200)

Started GET "/widgets/user.json?utf8=%E2%9C%93&authenticity_token=N8WsL3BATQiv9OWX4d29o62GOQgX9mXdt%2BBiVe%2FtzU%3D&cat%5B%5D=history&callback=%3F" for 127.0.0.1 at 2012-04-27 12:52:35 +0530 
Processing by WidgetsController#user as JSON 
Parameters: {"utf8"=>"✓", "authenticity_token"=>"N8WsL3BATQiv9OWX4d29o62GOQgX9mXdt+BiVe/tzU=", "cat"=>["history"], "callback"=>"?"} 
User Load (0.3ms) SELECT "users".* FROM "users" LIMIT 1 
===================================== Categories 
Completed 200 OK in 3ms (Views: 0.2ms | ActiveRecord: 0.3ms) 

とGoogle Chromeでリクエストが完了していることを示す正しいJSONP応答を示しています

?({"user":{"fname":"Test","lname":"User","email":"[email protected]"}}) 

すべては正しいようです。それでも私はエラーブロックで私に警告を与えます。なぜ私は成功の警告を取得していないのですか?何が間違っている可能性がありますか? 助けていただければ幸いです。

+0

エラーハンドラのパラメータとして指定されているエラーを警告してください。 – Bergi

+0

jQueryはajax呼び出しかjsonp呼び出しを行いますか?最初のものでは、コールバックパラメータは必要も許可もされていません。 – Bergi

+0

JSON呼び出しとコールバックパラメータ '?'を作成していますコントローラーでJSON応答を正しくフォーマットするために必要です。エラーの種類を印刷/チェックする方法を教えてください。 – Bongs

答えて

1

わかりました...私は、問題がどこにあるか見つけて(とてもきれいではない)解決策を考え出しました...

問題はURLエンコーディングにあるようです。

Started GET "/widgets/user.json?utf8=%E2%9C%93&cat%5B%5D=4&callback=%3F&user=3" for 127.0.0.1 at 2012-04-27 16:59:40 +0530 
Processing by WidgetsController#user as JSON 
Parameters: {"utf8"=>"✓", "cat"=>["4"], "callback"=>"?", "user"=>"3"} 
User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", "3"]] 
===================================== Categories 
Completed 200 OK in 1ms (Views: 0.1ms | ActiveRecord: 0.1ms) 

私はパラメータをデコードするapplication.jsにいくつかの変更を行ったが、以下のように(それは「コールバック」のパラメータを送信している方法)

$.getJSON(_form.attr("action"), _form.serialize(), function(data) { /* some code */ }は、要求を送信します。

var _url = _form.attr("action") + "?" + decodeURIComponent(_form.serialize()); 

$.getJSON(_url, function(data) { 
    alert("success"); 
}); 

これは、次のようにリクエストを送信し、また私の成功の警告を与えた:)(パラメータを参照してください;。余分な「_」パラメータもそれに追加しました)

Started GET "/widgets/user.json?utf8=%E2%9C%93&cat[]=4&callback=jQuery17203027302643749863_1335526106006&user=3&_=1335526108045" for 127.0.0.1 at 2012-04-27 16:58:28 +0530 
Processing by WidgetsController#user as JSON 
Parameters: {"utf8"=>"✓", "cat"=>["4"], "callback"=>"jQuery17203027302643749863_1335526106006", "user"=>"3", "_"=>"1335526108045"} 
User Load (2.6ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", "3"]] 
===================================== Categories 
Completed 200 OK in 4ms (Views: 0.1ms | ActiveRecord: 2.6ms) 

また、私はに:method => "get"を追加しましたform

0

remoteと書いてみませんか?あなたのページにいくつかのレンダリングされたコンテンツを表示することができます代わりにJSONのJavaScriptで応答することができます:

# in your view 
<%= form_tag widgets_user_path, :id => "testjsonform", remote: true do %> 

# in *.js.erb 
alert("<%= j params.to_yaml %>") 
$('body').append("<%= j render something %>") # or other stuff for filling your "parent" page 
+0

目的は、このコードを作成してウィジェット(一部のユーザーのサイト/ブログに配置可能)を作成することです。スクリプトはURLをヒットし、JSONデータを返してウィジェット内のデータを取り込みます。これは私のWebアプリケーションに役立ちますが、他の人には役に立ちません。 – Bongs

関連する問題