Проверка jQuery 1.7 ломает $ .getJSON () в jQuery 1.5? - PullRequest
3 голосов
/ 03 февраля 2011

Добрый день!

Я запускаю плагин на jQuery 1.4.4 с getJSON(), после обновления до 1.5 обратный вызов не вызывается.Возвращенный JSON действителен (я проверил с помощью валидатора).

Также я заметил дополнительный параметр get ?callback=..., который jQuery добавляет к URL

Кажется, я понял, как создатьтестовый пример и кажется, что JQuery validate 1.7 (последняя версия) является причиной:

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

Может быть, этот код в плагине является причиной:

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

Ответы [ 2 ]

5 голосов
/ 03 февраля 2011
0 голосов
/ 17 октября 2011

Это может быть уже хорошо задокументировано, но на всякий случай, ответ на этот пост сделал это для меня. В основном, обновите до jQuery Validate 1.8, и он будет работать с jQuery 1.5.2. Спасибо @ alexander-kahoun!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...