Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用ajax或jQuery在RubyonRails上更新数据库_Javascript_Jquery_Ruby On Rails_Ajax - Fatal编程技术网

Javascript 使用ajax或jQuery在RubyonRails上更新数据库

Javascript 使用ajax或jQuery在RubyonRails上更新数据库,javascript,jquery,ruby-on-rails,ajax,Javascript,Jquery,Ruby On Rails,Ajax,我有一个文本字段输入,它包含数据库属性(ref)的值。正如您从代码中注意到的,当我关注文本字段时,将显示边框,当单击out时,边框将取消填充 我的问题是,当我单击out时,我希望文本字段中的数据将存储在数据库中,而无需提交按钮 <script> $(document).ready(function(e){ $('.class1').focusin(function(){ $(this).attr('readonly',false); $(th

我有一个文本字段输入,它包含数据库属性(ref)的值。正如您从代码中注意到的,当我关注文本字段时,将显示边框,当单击out时,边框将取消填充

我的问题是,当我单击out时,我希望文本字段中的数据将存储在数据库中,而无需提交按钮

<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>

$(文档).ready(函数(e){
$('.class1').focusin(函数(){
$(this.attr('readonly',false);
$(this.css('border','1px黑色实体');
})
$('.class1').focusout(函数(){
$(this.attr('readonly',true);
$(this.css('border','0px白色固体');
})
} );
Ref:true,:class=>“classe1”)%%>
如何将值发送到应用程序?

发送ajax请求:。如果记录存在并且正在更新,则将“type”设置为“PUT”,如果是新记录,则将“POST”设置为“POST”。发送到的url很可能是控制器的名称,我认为您没有提供该名称。e、 g.“/控制器”

例如:

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

如果你不能让它工作,你需要提供更多关于你正在使用的rails代码的信息,我做了一些一般性的猜测。

要更新特定的记录,你只需使用jquery为输入字段或文本框调用
blur
函数。使用输入字段的类名或id调用blur函数

$('#ref').blur(function() {
    update_ref_field();
});
调用ajax的JS函数:

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;
}
这是我的代码:
在视图上:

    <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();


    })
} );

函数更新\参考\字段(){
var ref_value=$('#ref1').val();
var url='/ModController/update_ref_field/?ref1='+ref_value;
$.ajax({
类型:“POST”,
url:url,
//数据类型:“jsonp”,
//如果您的请求与跨域相关,则可以使用此jsonp
错误:函数(结果、状态、xhr){
警报('result='+result+'::status='+status+'::xhr='+xhr);
警报('更新记录时出错');},
成功:功能(结果、状态、xhr){
警报('result='+result+'::status='+status+'::xhr='+xhr);
警报(“记录已成功更新”);
}});
返回false;
}
$('#参考1')。焦点(函数(){
$(this.attr('readonly',false);
$(this.css('border','1px黑色实体');
})
$('#ref1').focusout(函数(){
$(this.attr('readonly',true);
$(this.css('border','0px白色固体');
$javascript:update_ref_field();
})
} );

在控制器上:
def update_ref_field()
开始
@projj=Project.find(参数[:Project_id])#projet courant
@local_date=Time.new().to_date
@sem=caluculer\u semaine(@local\u date)
@existe_mom_pour_cet_semaine=Mod.find(:all,:conditions=>{:project_id=>@projj.id,:semaine=>@sem})
#ce CA对应一个un更新
开始
@每个人都做一件事
如果(参数[:参考1])!=“”| |(参数[:ref1])!=无
a、 更新属性(:ref=>params[:ref1])
结束
如果a.保存
闪光[:注意]=“参考时间”
否则
闪烁[:错误]=“您的fr ref non aboutit”
结束
结束
救援异常=>e
将电子邮件放入电子邮件
放置e.backtrace.inspect
结束
将_重定向到:action=>'reunion'
结束
结束

当我使用tag_表单时,我工作正常,但我希望数据库上的更改将在后台进行

谢谢大家的帮助。
这个问题的解决方案是使用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();


}

感谢您的帮助,但它不起作用:此消息已显示在警报上:result=[object]::status=error::xhr=未找到您知道我该怎么做吗。感谢againI在aswer中编写了我的代码,请找到错误。感谢evry one,我找到了解决方案:)