Ajax请求在rails应用程序中给出错误

时间:2012-04-15 16:50:15

标签: javascript jquery ruby-on-rails ajax ruby-on-rails-3

在我的rails应用程序中,我正在制作一个ajax请求     $ .ajaxSetup({             url:'/ get_paypal_button'           });

      var dataToSend = { fundraiser_id: <%= @fundraiser.id %>,  
        amount:  $("#amount").val(),
        currency: $('#donor_donation_currency').val(),
        comment: $('#donor_donation_comment').val(),
        anonymous: $("#donor_donation_anonymous").is(":checked"),
        donor_email: $('#email').val(),
        donor_name: $('#name').val(),
        donor_city: $('#city').val(),
        donor_country: $('#country').val() };

      $.ajax({
        type: "POST",
        dataType:'JSON',
        async: true,
        data:dataToSend,
        success: function(json){
          $('#id_amount').val(json.amount);
          $('#custom_content').val(json.custom);
        },
        error:function (xhr, ajaxOptions, thrownError){
          console.dir(xhr);
          console.dir(thrownError);
        }
      });

在控制器中我将数据处理为

def get_paypal_button
  @fundraiser = Fundraiser.where(:id => params[:fundraiser_id]).last
  if params[:currency] == 'INR'
         amount_in_sgd = params[:amount].to_f/@fundraiser.sgd_to_inr.to_f
  elsif params[:currency] == 'USD'
         amount_in_sgd = params[:amount].to_f*@fundraiser.usd_to_sgd.to_f
  else
         amount_in_sgd = params[:amount].to_f
  end

  puts '----------finding donor-------------'
  @donor = Donor.find_or_initialize_by_email(params[:donor_email])
  @donor.update_attributes(:name => params[:donor_name], :city => params[:donor_city], :country => params[:donor_country])
  custom = @donor.id.to_s + "::" + params[:anonymous].to_s + "::" + params[:comment].to_s

  @hash = {:amount => amount_in_sgd, :custom => custom}.to_json
  respond_with(@hash) do |format|
    format.json { render :json =>  @hash }
  end

当我使用调试器并获得@hash的值时,它给出了(这是正确的)

"{\"amount\":15.0,\"custom\":\"2::false::\"}"

但是ajax请求正在执行我在错误的情况下编写的代码并且它正在获得空响应。

我已经尝试过所有内容而且完全无能为力,因为几天前类似的代码正在运行。

1 个答案:

答案 0 :(得分:0)

或许format未按预期设置:

检查来自浏览器的Accepts header作为Ajax调用的一部分。您可以在Firebug的网络选项卡中看到它。

或者将format转储到日志中并进行检查。