2013-03-15 32 views
-2

我有一個文本字段輸入,它包含數據庫屬性(ref)的值。正如您從代碼中注意到的那樣,當我將注意力集中在文本字段上時,邊框將出現,並且在單擊時邊框將會消失。在rails上使用ajax或jQuery更新數據庫

我的問題是,當我點擊時,我希望文本字段中的數據將被存儲在沒有提交按鈕的數據庫中。

<script> 
$(document).ready(function(e){ 

    $('.class1').focusin(function(){ 
     $(this).attr('readonly',false); 
     $(this).css('border','1px black solid'); 
    }) 

    $('.class1').focusout(function(){ 
     $(this).attr('readonly',true); 
     $(this).css('border','0px white solid'); 

    }) 
}); 
</script> 

<div>Ref: <%= text_field_tag(:ref,@ref.to_s,:readonly=>true, :class => "classe1")%> </div> 

如何將值發送到我的應用程序?

+0

http://guides.rubyonrails.org/ajax_on_rails.html – DickieBoy 2013-03-15 15:20:46

回答

0

感謝所有您的幫助。
這個問題的解決方案是使用JavaScript函數,將在控制器中調用其他功能

function loadXMLDoc(id, val, name) 
{ 

    var xmlhttp; 
    if (window.XMLHttpRequest) 
    {// code for IE7+, Firefox, Chrome, Opera, Safari 
     xmlhttp=new XMLHttpRequest(); 
    } 
    else 
    {// code for IE6, IE5 
     xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
    } 
    xmlhttp.onreadystatechange=function() 
    { 
     if (xmlhttp.readyState==4 && xmlhttp.status==200) 
     { 
      //document.getElementById("myDiv").innerHTML=xmlhttp.responseText; 
      alert(); 
     } 
    } 

      //update_ref_field => methode in the contoller with complete the update in the data  base 
      xmlhttp.open("GET","update_ref_field?ref1="+val ,true); 
      xmlhttp.send(); 


} 
0

發送ajax請求:http://api.jquery.com/jQuery.ajax/。如果記錄存在並且您正在更新,請將「類型」設置爲「PUT」;如果記錄是新記錄,則將其設置爲「POST」。發送此信息的網址很可能是我認爲您提供的控制器的名稱。例如「/控制器」。

例子:

$.ajax({ 
    type: "POST", 
    url: "/controller", 
    data: {ref: $('.classe1').html().trim()} 
}); 

如果你不能得到它的工作,你需要提供有關您正在使用的Rails代碼一些更多的信息,我拍了幾張普通的猜測。

1

爲了更新特定記錄,您只需使用jquery爲該輸入字段或文本框調用blur函數。使用輸入字段的類名稱或ID調用模糊函數。

$('#ref').blur(function() { 
    update_ref_field(); 
}); 

JS函數來調用AJAX:

function update_ref_field(){ 
    var ref_value = $('#ref').val(); 
    var url = '/controller_name/action_name/?ref='+ref_value; 
    $.ajax({ 
     type: 'put', 
     url: url, 
     dataType: "jsonp", 
     // You can use this jsonp if your request related to cross domain 
     error: function (result, status, xhr){ 
      alert('result='+result+'::status='+status+'::xhr= '+ xhr); 
      alert('Error occurred while updating the record.');   }, 
     success: function(result, status, xhr){ 
      alert('result='+result+'::status='+status+'::xhr= '+ xhr); 
      alert('Record updated successfully.'); 

    }); 
    return false; 
} 

更新的代碼

function update_ref_field(){ 
    var ref_value = $('#ref').val(); 
    var url = '/controller_name/action_name/?ref='+ref_value; 
    $.ajax({ 
    type: 'post', 
    url: url, 
    dataType: 'script', 
    error: function(data){ 
     alert('Error occurred while updating the record.'); 
    }, 
    success: function(data){ 
     alert('Record updated successfully.'); 
    }); 
    return false; 
} 
+0

感謝您的幫助 但它確實不工作: 此消息已在提醒上顯示: result = [object Object] :: status = error :: xhr =未找到 您知道我該怎麼做。再次感謝 – 2013-03-18 15:15:22

+0

我已經寫了我的代碼在aswer,請你能找到錯誤。 – 2013-03-18 15:47:04

+0

請參閱最新的代碼。 – Rubyist 2013-03-19 03:45:10

0

,這是我的代碼:
的觀點:

<script> 
    function update_ref_field(){ 
    var ref_value = $('#ref1').val(); 
    var url = '/ModController/update_ref_field/?ref1='+ref_value; 
    $.ajax({ 
     type: "POST", 
     url: url, 
     //dataType: "jsonp", 
     // You can use this jsonp if your request related to cross domain 
     error: function (result, status, xhr){ 
      alert('result='+result+'::status='+status+'::xhr= '+ xhr); 
      alert('Error occurred while updating the record.');   }, 
     success: function(result, status, xhr){ 
      alert('result='+result+'::status='+status+'::xhr= '+ xhr); 
      alert('Record updated successfully.'); 
     }}); 
     return false; 
     } 


     $('#ref1').focusin(function(){ 
      $(this).attr('readonly',false); 
      $(this).css('border','1px black solid'); 
     }) 

     $('#ref1').focusout(function(){ 
      $(this).attr('readonly',true); 
      $(this).css('border','0px white solid'); 
      $javascript:update_ref_field(); 


    }) 
}); 
DEF update_ref_field()
開始
@ projj = Project.find。(PARAMS [::PROJECT_ID])#projet柯朗
@local_date = Time.new()TO_DATE

控制器上


@sem = caluculer_semaine(@local_date)
@existe_mom_pour_cet_semaine = Mod.find(:所有,:條件=> {:PROJECT_ID => @ projj.id,:semaine => @sem})
#CE CAS對應聯合國更新
開始
@ existe_mom_pour_cet_semaine.each do | a |
if(params [:ref1])!=「」|| (params [:ref1])!=無
a.update_attributes(:ref => params [:ref1])
end
if a。保存
閃光[:通知] = 「瀨一個元旦REF」
別的
閃光[:錯誤] = 「瀨ajour FR REF非aboutit」


救援異常=>電子
把e.message
放e.backtrace.inspect

redirect_to的:行動=> '團聚'


當我使用tag_form

,我正常工作,但我想,關於數據庫的變化會在後臺
感謝

+0

感謝evry one,我找到了解決方案:) – 2013-03-19 07:44:50