2013-07-01 29 views
0

我有一個JavaScript類用於管理AJAX裝載機,它看起來像這樣: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) 

我只是試圖確定是否有任何數據請求參數的微調項設置爲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! 

我該怎麼做?不想使用插件。

+2

這是因爲如果數據沒有固定的和值分別爲通行證作爲URL的一部分,那麼'data'元素將爲空 –

+0

那麼您的解決方案是什麼,以便我可以檢查spinner參數是否設置爲false? – keruilin

+1

也有可能'數據'可以是一個對象而不是一個字符串。 –

回答

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'請求。 'get.url'設置爲'get'請求:'var query = URI.parseQuery(settings.data || settings.url);' –