3 Stimmen

jQuery Validate 1.7 bricht $.getJSON() auf jQuery 1.5?

Guten Tag!

Ich bin ein Plugin auf jQuery 1.4.4 mit getJSON() Nach dem Upgrade auf 1,5 wird der Callback nicht aufgerufen. Das zurückgegebene JSON ist gültig (ich habe mit Validator überprüft).

Außerdem ist mir ein zusätzlicher get-Parameter aufgefallen ?callback=... die jQuery der URL hinzufügt

Es scheint, dass ich herausgefunden habe, wie man einen Testfall erstellt und es scheint, dass JQuery validate 1.7 (neueste Version) die Ursache ist:

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

Vielleicht ist dieser Code im Plugin die Ursache:

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

5voto

PetersenDidIt Punkte 25408

0voto

mateuscb Punkte 9050

Möglicherweise ist dies bereits gut dokumentiert, aber nur für den Fall, dass Sie die Antwort auf diese Stelle hat es für mich getan. Im Grunde, aktualisieren Sie auf jQuery Validate 1.8 und es wird mit jQuery 1.5.2 arbeiten. Danke @alexander-kahoun!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X