javascript - 带参数的回调函数

标签 javascript asp.net callback pagemethods

我正在使用 AJAX 页面方法,但我似乎无法传递所需的参数:

  function getFavStatus() {
    //favs is a list of DOM <imgs> that I want to modify their img.src attribute
    for (i = 0; i < favs.length; i++) {
      PageMethods.isFavorite(favs[i].alt,setFavImg(favs[i]));
    }
  }

  function setFavImg(fav, response) {
    fav.src = response;
  }

我想不通的问题是如何使用 PageMethods 的“响应”,并将 DOM 对象传递给回调函数。

我也试过这样做:

 function getFavStatus() {
    for (i = 0; i < favs.length; i++) {
      PageMethods.isFavorite(favs[i].alt, function (response) {
                favs[i].src = response;});   
      );
    }
  }

在这种情况下,响应正常工作,但 i 始终是 > favs.length,因为它已经通过循环迭代...

编辑:我的 PageMethods.isFavorite 签名是:

[System.Web.Services.WebMethod]
public static string isFavorite ( string p_id )

谁能指出我正确的方向?

谢谢!

最佳答案

试试这个:

PageMethods.isFavorite(favs[i].alt, 
  function (response, ctx) {
       /* success callback */
       ctx.src = response;
  },
  function(response) { /* failed callback */ },
  favs[i] /* context */);

上下文被传递给回调,因此您可以将对图像的引用传递给回调,并在那里的回调中设置它。

最初的问题是页面方法是异步的,因此直到循环完成后才会触发回调。因此,最后一项受到影响。

HTH.

关于javascript - 带参数的回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4595270/

相关文章:

javascript - 模拟 Angular JS Controller Jasmine

javascript - YouTube iframe api(现有的 iframe);无法让 iframe-api 工作

javascript - 获取字符输入,跨浏览器

asp.net - 将 List<string> 传递给存储过程

c# - 如何使用单独的逗号 (,) 绑定(bind)下拉列表中的两列值

javascript - 当文本区域/输入模糊/失去焦点时仍然显示 div

c# - 在 asp.net 中自定义打印属性

java - 回调和接口(interface)的区别

node.js - 在 Node.js 中 - 事件(EventEmitter 和 Listener Function 对象)和异步回调之间是否有任何关系

回调的 JavaScript 参数