2013-05-05 100 views
0

我使用以下$.post语法从数据库中检索json数据,并将其传递给将它们附加到某个(!)div的函数。

$.post("request.php", { var1:'var1', var2:var2, .. }, myownfunction, "json"); 

我可以从上面这一行直接传递一个变量给我的函数吗? 由于一些小故障,我在脚本中创建了一个错误。

我有很多div类的'x',并且当用户选择一个,它的类被设置为'selected'。上述post请求中的函数仅针对:$('div#selected'),但是,如果通过用户选择另一个div的响应时间,服务器的数据将被附加到错误的div。

我想将选定的div的id传递给我的函数,这样就不会在什么地方发生混淆。有没有办法做到这一点?

现在,我想将id传递给request.php,并将其作为json的一部分返回,但那样做并不优雅。

+0

你什么时候发POST请求?点击一个元素? – undefined 2013-05-05 07:22:47

+0

divs包含图像,当用户点击一个div时,它会变大,这就是我发送请求的时间,这样我就可以将关于图像的信息附加到div上。但是当用户等待时,他可以点击另一个div .... – ppseprus 2013-05-05 07:25:35

回答

2

我想选择的div的ID传递给我的功能,所以,有可能是在发生的事情在没有混乱。有没有办法做到这一点?

是的,您可以使用$.Proxy传递点击的div的上下文。并在函数内部使用this.id访问id的id。

$.post("request.php", 
       { var1:'var1', var2:var2, .. }, 
       $.proxy(myownfunction, elem), "json"); 

里面的功能

function myownfunction(response) 
{ 
.... 
    this.id // here will be the id of the element passed if it is the clicked div then you will get it here 
.... 
} 
+0

这看起来不错!谢谢! – ppseprus 2013-05-05 07:38:31

+0

很高兴帮助... :) – PSL 2013-05-05 07:38:54

+1

不,不,不!它是'this.id',而不是'$(this).attr('id')'!请不要使用jQuery时了解。你也应该只是代理'elem'而不是'$(elem)'。正如你所写的,当你不需要调用它时,你会为'elem'调用两次jQuery构造函数。 – Alnitak 2013-05-05 07:49:27

1

如果将函数调用包装为匿名函数,则可以传递所需的任何参数。

$.post( 
    "request.php", 
    { var1:'var1', var2:var2, .. }, 
    function(data, textStatus, jqXHR) { 
     myownfunction(data, textStatus, jqXHR, myVariable); 
    }, 
    "json" 
); 
1

如果您使用的$.ajax代替$.post你可以使用它的context设置明确设置回调的this值要求:

$.ajax('request.php', { 
    type: 'POST', 
    data: { ... }, 
    context: mydiv 
}).done(myownfunction); 

function myownfunction(data) { 
    var id = this.id;  // extracting the element here 
    ... 
}   
+0

感谢这个!我试过了,但没有奏效。 :S – ppseprus 2013-05-05 07:57:59