【问题标题】:$.(ajax) wrapper for Jquery - passing parameters to delegatesJquery 的 $.(ajax) 包装器 - 将参数传递给委托
【发布时间】:2010-05-14 17:00:45
【问题描述】:

我在我的应用程序中广泛使用 $.(ajax) 函数来调用 ASP.net Web 服务。我想编写一个包装器以集中所有 ajax 调用。我找到了几个简单的解决方案,但没有一个解决将参数传递给代表的问题,例如,如果我有:

$.ajax({
        type: "POST",
          url: "http://localhost/TemplateWebService/TemplateWebService/Service.asmx/GetFoobar",

        data: jsonText,
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var results = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;

            OnSuccess(results, someOtherParam1, someOtherParam2);


        },

        error: function(xhr, status, error) {
            OnError();
        }
    });

此调用的包装器必须能够将 someOtherParam1、someOtherParam2 传递给 OnSuccess 委托...除了将变量打包到通用数组中之外,我想不出其他解决方案。

你们是如何解决这个问题的?

【问题讨论】:

  • 问题是缺乏透明度,我发布这个是为了了解其他人如何处理类似情况。

标签: jquery ajax parameter-passing


【解决方案1】:

我有同样的问题。我的解决方法是将参数包含在数据变量中,然后在成功/错误/完成时将其从 this.data 中拉出。 this.data 返回时看起来像 foo=1&bar=2&baz=3,因此您需要将参数解析出来。

$.ajax({
  url: 'blah.html',
  data: {foo:1,someOtherParam1:2,someOtherParam2:3},
  success: function(data) {
    var params = this.data.split("&");
    OnSuccess(results, params[1].split("=")[1], params[2].split("=")[1]);
  }
});

确保您不会将 this.data 与使用成功函数返回的数据变量混淆...

【讨论】:

  • 如果你有多个参数怎么办?你有类似 this.data.param1、this.data.param2 等的东西吗?
  • 没有。 this.data 看起来像 foo=1&bar=2&baz=3 所以你必须解析字符串并将其拉出。
猜你喜欢
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 2015-07-07
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多