1

私は自分の開発環境で作業しています。私が望む動作: モーダル ダイアログにフォームがあります。ユーザーが送信をクリックすると、データが「質問」コントローラーに送信されます。一部の電子メールが送信された後、ダイアログの内容が更新され、「メッセージは正常に送信されました」と表示されます。かなり基本的です。問題は、ヘッダーを適切に設定できないため、Rails がデータを JavaScript ではなく html として処理していることです。電子メールは送信されますが、Rails は 406 エラーを返します。これが私のコードです:

_social.html.erb

    <div class='jqmWindow notices' id="emailModal">
      <h3>Email a link to this poll</h3>
      <p>You are emailing a link to the following poll:<br><strong><%=@question.text%></strong></p>
      <%= form_tag(:controller=>'questions', :action=>'email' , :method => "post",  :id=>"emailForm") do %>
              <%= label_tag(:emails_label, "Enter up to 20 email addresses separated by commas:" )%>
          <%= text_area_tag(:emails, "",:size => "60x6")%>
          <%= hidden_field_tag(:question_id, @question.id )%>
              <%= label_tag(:email_msg_label, "Enter a brief message to accompany your link:" )%>
          <%= text_area_tag(:email_msg, "",:size => "60x4")%><br>

          <%= submit_tag ( "Submit")%>
        <%end%>
    </div>

...

<script>

$(document).ready(function(){
  $('#shareModal').jqm();
  $('#emailModal').jqm();
  $.ajaxSetup({
    'beforeSend': function(xhr) {
        xhr.setRequestHeader("Accept", "text/javascript")
    }
  });


  $(document).ajaxSend(function(e, xhr, options) {
    var token = $("meta[name='csrf-token']").attr("content");
    xhr.setRequestHeader("X-CSRF-Token", token);
  });

...

  $('#emailForm').submit(function(){
    $.post($(this).attr('action'), $(this).serialize(), null, "script");
    return false;
  });
});

</script>

question_controller.rb

 def email
    question = Question.find(params[:question_id])
    emails = params[:emails].split(/, /)
    emails.each do |recipient|
      GenericMailer.share(question, current_user.email, recipient, params[:email_msg]).deliver
    end
    respond_to do |format|
      format.js
    end


  end

email.js.erb (現在、このコードは実行されません!)

alert("hello!");
$(#emailModal).html("Email sent successfully!");

ヘッダーは次のとおりです。

    Request URL:http://127.0.0.1:3000/questions/emailForm/email?method=post
    Request Method:POST
    Status Code:406 Not Acceptable
    Request Headersview source
    Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3
    Accept-Encoding:gzip,deflate,sdch
    Accept-Language:en-US,en;q=0.8
    Cache-Control:max-age=0
    Connection:keep-alive
    Content-Length:172
    Content-Type:application/x-www-form-urlencoded
__utma=96992031.1133215771.1353171766.1354190632.1354240040.26; __utmb=96992031.69.10.1354240040; __utmc=96992031; __utmz=96992031.1353379538.10.2.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=http://127.0.0.1:3000/questions/5
    Host:127.0.0.1:3000
    Origin:http://127.0.0.1:3000
    Referer:http://127.0.0.1:3000/questions/1
    User-Agent:Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.64 Safari/537.11

ご協力いただきありがとうございます。

4

3 に答える 3

1

回答してくれたすべての人に感謝します。ajax コードが実行されることさえなかったことが判明しました。レールの問題でした。これが原因でした:

<%= form_tag(:controller=>'questions', :action=>'email' , :method => "post",  :id=>"emailForm") do %>

id はリクエストに追加されていましたが、フォーム タグに css id として追加されていませんでした。したがって、jQuery セレクターはフォーム送信をキャッチしていませんでした。正しいコード:

<%= form_tag({:controller=>'questions', :action=>'email' }, {:id=>"emailForm"}) do %>

乾杯....

于 2012-12-01T14:44:58.387 に答える
0

ajaxSetup が正しくないようです。JS の公式の MIME タイプはapplication/javascript

ヘッダーでは、Accept:文字列に JS 用のものが何も含まれていないことがわかります。まず.js、Rails コントローラーを除外するために、追加された URL を呼び出してみてください。

そして、ブラウザーのインスペクターapplication/javascriptで、Accept リストの最初にあることを確認します。

于 2012-11-30T12:32:58.173 に答える
0

email.js.erb の javascript/jquery コードをデバッグしましたか? 406 エラーは、多くの場合、js コードのタイプミスを示しています (エラー コードの意味に関しては明らかではありません)。

少なくとも、あなたの例では、2 行目にタイプミスがあり、一重引用符がありません。

 $('#emailModal').html("Email sent successfully!"); 
于 2012-11-30T21:47:17.047 に答える