开发者

jQuery Validate 1.7 breaks $.getJSON() on jQuery 1.5?

开发者 https://www.devze.com 2023-02-08 14:25 出处:网络
Good day! I\'m running a plugin on jQuery 1.4.4 with getJSON(), after uprade to 1.5, the callback is not called. The returned JSON is valid (I\'ve checked with validator).

Good day!

I'm running a plugin on jQuery 1.4.4 with getJSON(), after uprade to 1.5, the callback is not called. The returned JSON is valid (I've checked with validator).

Also I noticed additional get parameter ?callback=... which jQuery adds to the URL

It seems I figured out how to create a test case and it seems that JQuery validate 1.7 (latest version) is the cause:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<开发者_如何学JAVA;html xmlns="http://www.w3.org/1999/xhtml" lang="ru">

<head>
    <title>

    </title>

    <meta http-equiv="content-type" content="text/html; charset=utf8" />     
    <script type="text/javascript" src="js/jquery-1.5.min.js"></script>
<!--    
    If I uncomment this - it will not work
    <script type="text/javascript" src="js/jquery.validate.js"></script>
-->
</head>
<body>
<script type="text/javascript">
$(function(){
    $.ajaxSetup({ cache: false });
    $('#clickme').click(function(){
        var params = {userid : 'some-user-id-to-choose-right-temp-FTP-folder-for-the-user'};
        $.getJSON('/ajax-page_material-edit-ftp-filelist.php', params, function(data) {
            console.log(data);
        });
    });
});
</script>

<a href="#" id="clickme">Click Me!</a>

</body>
</html>

Maybe this code in plugin is the cause:

// ajax mode: abort
// usage: $.ajax({ mode: "abort"[, port: "uniqueport"]});
// if mode:"abort" is used, the previous request on that port (port can be undefined) is aborted via XMLHttpRequest.abort() 
;(function($) {
    var ajax = $.ajax;
    var pendingRequests = {};
    $.ajax = function(settings) {
        // create settings for compatibility with ajaxSetup
        settings = $.extend(settings, $.extend({}, $.ajaxSettings, settings));
        var port = settings.port;
        if (settings.mode == "abort") {
            if ( pendingRequests[port] ) {
                pendingRequests[port].abort();
            }
            return (pendingRequests[port] = ajax.apply(this, arguments));
        }
        return ajax.apply(this, arguments);
    };
})(jQuery);


A ticket for the issue was already created and a patch has been submitted

https://github.com/jzaefferer/jquery-validation/issues/#issue/36

https://github.com/bigfix/jquery-validation/commit/9aa53f9241224ba349f9fe1b2c801be0f431b63b


This may be already well documented, but just in case, the answer on this post did it for me. Basically, update to jQuery Validate 1.8 and it will work with jQuery 1.5.2. Thanks @alexander-kahoun!

0

精彩评论

暂无评论...
验证码 换一张
取 消