2010-10-31 203 views
1

对Javcascript没有太多的知识,除了用于某些Dynamic HTML。现在我冒险了一点Ajax地面,并与下面的代码有问题(借用从 http://kpumuk.info/php/ajax-enabled-smarty-plugins-part-2-ajax_form/和编辑,以适应我的需要)。Javascript prototype.js:如何将参数传递给回调函数

如何将update_id参数传递给obSubmit函数?

var SmartyAjax = { 

    submit: function(form, update_id, params, callback) 
    { 
     var myAjax = new Ajax.Request(
     form.action, 
     { 
     method: form.method, 
     parameters: Form.serialize(form.id), 
     onComplete: callback || this.onSubmit 
     }); 
    }, 

    onSubmit: function(originalRequest) 
    { 
     var results = originalRequest.responseText; 
     this.target = $("target2"); 
     this.target.innerHTML = results; 
    } 

} 

我想UPDATE_ID传递给函数的onsubmit,这样我可以将其指定为目标。根据Prototype文档,它会自动获取作为第一个参数传递的Ajax.Response对象。所以,这就是originalRequest引用的内容。我没有看到将update_id传递给该函数的方法。我怎么做?

在相关说明:我第一次看到这个“name:function(){}”语法。那是什么?这是否需要,因为它创建了一个对象的方法?一个指针简单的解释将不胜感激。

非常感谢!

回答

1

你需要自己从匿名包装调用函数(除非你要修改的原型来源,我强烈建议你避免的),像这样:

submit: function(form, update_id, params, callback) 
{ 
    var complete = callback || this.onSubmit; 
    var myAjax = new Ajax.Request(
    form.action, 
    { 
    method: form.method, 
    parameters: Form.serialize(form.id), 
    onComplete: function(req) { complete.call(this, req, update_id); } 
    }); 
}, 

现在,你的处理器将有第二个参数,该参数update_id传入此功能,例如,你可以这样做:

onSubmit: function(originalRequest, update_id) { 
    alert(update_id); 
} 
+0

@bolero - 不要用上面的*替换你的'onSubmit',它只是一个例子,表明不管你用'onSubmit'(无论是回调还是基础'onSubmit'),现在都会得到第二个论据。例如你可以在'onSubmit'函数签名中添加第二个参数并在里面使用它,但是当前的代码仍然需要运行来更新元素。 – 2010-10-31 13:02:42

+0

@bolero - 我还看到一个额外的'x'在那里滑动,可能会抛出一个错误:'var complete = callback || this.onSubmitx;'应该是'var complete = callback || this.onSmitmit;' – 2010-10-31 13:03:23

+0

我不明白我如何发布评论的方式与我发布原始问题的方式相同?例如体面的代码格式。我怎么做? 当我把你的代码传递给我的代码时,它运行了一点,变量不会以某种方式传递。我想发布代码,但comnment字段只是提交未格式化的垃圾,所以我删除了我的评论。 – bolero 2010-10-31 13:08:01

2

你就不能这样做:

onComplete: callback || this.onSubmit.bind(this, update_id)