2013-07-01 2 views
0

У меня есть класс JavaScript для управления АЯКСОМ погрузчиками, который выглядит следующим образом:JQuery запрос регулярных выражений данных об ошибке

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) 

Я просто пытаюсь определить, имеет ли какой-либо из параметров запроса данных значение ложь. Например:

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! 

Как это сделать? Не рекомендуется использовать плагин.

+2

Это происходит потому, что если данные не набор, а значения были проходят как часть URL, то Элемент 'data' будет равен –

+0

, так что вы можете решить, чтобы проверить, установлено ли значение параметра spinner param равным false? – keruilin

+1

также существует вероятность того, что 'data' может быть объектом, а не строкой. –

ответ

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(); 
    }); 
    } 

}; 
0

Я бы предположил, что для этой задачи вы используете библиотеку разбора URL-адресов, например this one (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(); 
} 

Fiddle!

+1

'settings.data' устанавливается для' post' запросов. 'settings.url' установлен для' get' запросов: 'var query = URI.parseQuery (settings.data || settings.url);' –

Смежные вопросы