artvolk
artvolk

Reputation: 9528

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

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">

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

Upvotes: 3

Views: 1762

Answers (2)

mateuscb
mateuscb

Reputation: 10730

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!

Upvotes: 0

Related Questions