Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/82.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
Ruby on rails 3 如何从ajax成功调用JQuery小部件函数?_Ruby On Rails 3_Jquery_Google Maps Api 3_Jquery Widgets - Fatal编程技术网

Ruby on rails 3 如何从ajax成功调用JQuery小部件函数?

Ruby on rails 3 如何从ajax成功调用JQuery小部件函数?,ruby-on-rails-3,jquery,google-maps-api-3,jquery-widgets,Ruby On Rails 3,Jquery,Google Maps Api 3,Jquery Widgets,我试图从ajax调用的成功节点调用一个小部件函数,但没有成功 我的应用程序允许用户在谷歌地图上添加一些带有描述的标记。它使用JQuery addresspicker小部件和Rails。我添加了一个函数,负责添加一个标记,它显示一个带有描述文本区域的表单和一个提交信息的按钮。因此,在用户提交后,应用程序调用一个Ajax函数来存储用户的数据,如果成功,我想调用另一个小部件函数,例如,关闭InfoWindow 问题是,我不知道如何从success Ajax节点调用另一个小部件函数 JQuery-add

我试图从ajax调用的成功节点调用一个小部件函数,但没有成功

我的应用程序允许用户在谷歌地图上添加一些带有描述的标记。它使用JQuery addresspicker小部件和Rails。我添加了一个函数,负责添加一个标记,它显示一个带有描述文本区域的表单和一个提交信息的按钮。因此,在用户提交后,应用程序调用一个Ajax函数来存储用户的数据,如果成功,我想调用另一个小部件函数,例如,关闭InfoWindow

问题是,我不知道如何从success Ajax节点调用另一个小部件函数

JQuery-addresspicker.js
.
.
.

_addFormListener: function(map, marker) {
    var form = $(".add-form").clone().show();
    var infoWindowContent = form[0];
    var infoWindow = new google.maps.InfoWindow({
        content: infoWindowContent
    });

    google.maps.event.addListener(marker, "click", function() {
        infoWindow.open(map, this);
    });

    form.submit(function (event){
       event.preventDefault();

       var description = $("textarea[name=description]", this).val();
       var latitude    = marker.getPosition().lat();
       var longitude   = marker.getPosition().lng();

       var data = {
         description    : description,
         latitude       : latitude,
         longitude      : longitude
       };

       $.ajax({
        type : "POST",
        url  : "/places",
        data: {place: data},
        beforeSend: function(x) {
            x.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))
        },
        success: function(x) {
            this._closeFormFields(); // Not working!
        }
       });
    });
},

_cleanFormFields: function() {
  console.log("testing");
}
.
.

PlacesController
def create
@place = Place.new(params[:place])

if @place.save
  redirect_to places_path
else
  render :status => 422
end
结束

浏览器控制台引发“未捕获类型错误:对象[Object Window]没有方法”\u cleanFormFields”


有什么想法吗?谢谢!

这里的问题是它的范围-ajax调用覆盖了它来引用ajax调用对象,而您失去了小部件引用

要解决这个问题,只需添加一个变量来存储对小部件的引用,如

 form.submit(function (event){
   event.preventDefault();

   var description = $("textarea[name=description]", this).val();
   var latitude    = marker.getPosition().lat();
   var longitude   = marker.getPosition().lng();

   var data = {
     description    : description,
     latitude       : latitude,
     longitude      : longitude
   };

   //new widget reference var (this here still refers to the widget)
   var widget = this;

   $.ajax({
    type : "POST",
    url  : "/places",
    data: {place: data},
    beforeSend: function(x) {
        x.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))
    },
    success: function(x) {
        //now use the var widget here
        widget._closeFormFields(); // Works!
    }
   });
});

摆脱_closeFormFields前面的'this'。谢谢你的回复,RadBrab。我试过了,但现在的例外是:“未捕获引用错误:_cleanFormField未定义”如果你在_addFormListener方法之前定义_cleanFormFields呢?使用“self”_addFormListener:函数(映射,标记){var form=$(“.add form”)解决.clone().show(),self=this;form.submit(函数(事件){event.preventDefault();self._cleanFormFields();}}