0

我有一个用于管理 ajax 加载器的 JavaScript 类,如下所示:

App.Utils.Spinner = {

  showSpinner: function() {
    return $('#spinner-wrapper').show();
  },

  hideSpinner: function() {
    return $('#spinner-wrapper').hide();
  },

  bindEvents: function() {
    $(document).on('ajaxSend', function(e, xhr, settings) {
      var spinnerRegExp = /spinner\=false/;

      if (!settings.data.match(spinnerRegExp)) {
        return App.Utils.Spinner.showSpinner();
      }
    });

    $(document).on('ajaxComplete', function() {
      return App.Utils.Spinner.hideSpinner();
    });
  }

};

此行每次都会导致错误(未捕获的类型错误:对象没有方法匹配):

settings.data.match(spinnerRegExp)

我只是想确定是否有任何数据请求参数已将微调器设置为 false。例如:

utf8=%E2%9C%93&authenticity_token=F3xCyZ0GV1SMGMXZzGKUTomMCQxAbu9jqiBhB4YchuE%3D&bet%5Bhay_line_id%5D=27&hey%5Bpick%5D=1&spinner=false&het%5Bbails%5D=50&commit=Do+it!

我怎样才能做到这一点?最好不要使用插件。

4

2 回答 2

0

我建议,对于这个任务,你可以使用一个 URL 解析库,比如这个 (URI.js)

自己通过正则表达式解析 URL 本质上与使用正则表达式解析 HTML 相同。它会在某种程度上起作用,但可扩展性为零,调试也是如此。

使用图书馆,它会很简单:

var parsed = URI.parse('http://example.com/something/requested?with=parameter&parameter=true');
var query = URI.parseQuery(parsed.query);

if (query.with && query.with == 'parameter')
{
    // do stuff!
}

对于您的问题,它就像:

var query = URI.parseQuery(settings.data);

if (query.spinner && (query.spinner == "true" || query.spinner = true))
{
    return App.Utils.Spinner.showSpinner();
}

小提琴

于 2013-07-01T12:27:00.520 回答
0

所以这是最终为我工作的代码,不需要外部库:

App.Utils.Spinner = {

  showSpinner: function() {
    return $('#spinner-wrapper').show();
  },

  hideSpinner: function() {
    return $('#spinner-wrapper').hide();
  },

  bindEvents: function() {
    $(document).on('ajaxSend', function(e, xhr, settings) {
      var spinnerRegExp = /spinner\=false/;
      var dataStringified = JSON.stringify(settings.data || settings.url);

      if ( dataStringified && !dataStringified.match(spinnerRegExp) ) {
        return App.Utils.Spinner.showSpinner();
      }
    });

    $(document).on('ajaxComplete', function() {
      return App.Utils.Spinner.hideSpinner();
    });
  }

};
于 2013-08-21T02:07:29.570 回答