diff --git a/core/misc/ajax.js b/core/misc/ajax.js index 194c5e5..858f4b3 100644 --- a/core/misc/ajax.js +++ b/core/misc/ajax.js @@ -248,17 +248,21 @@ ajax.options.data.dialogOptions = elementSettings.dialog; } - if (ajax.options.url.indexOf('?') === -1) { - ajax.options.url += '?'; - } else { - ajax.options.url += '&'; - } - var wrapper = 'drupal_' + (elementSettings.dialogType || 'ajax'); if (elementSettings.dialogRenderer) { wrapper += '.' + elementSettings.dialogRenderer; } - ajax.options.url += Drupal.ajax.WRAPPER_FORMAT + '=' + wrapper; + + var queryParameter = Drupal.ajax.WRAPPER_FORMAT + '=' + wrapper; + if (ajax.options.url.indexOf(Drupal.ajax.WRAPPER_FORMAT) === -1) { + // Ensure that we have a valid URL by adding ? when no query parameter is + // yet available, otherwise append using &. + ajax.options.url += (ajax.options.url.indexOf('?') === -1) ? '?' : '&'; + ajax.options.url += queryParameter; + } else { + var regexPattern = new RegExp(Drupal.ajax.WRAPPER_FORMAT + '=[^&]*', 'i'); + ajax.options.url = ajax.options.url.replace(regexPattern, queryParameter); + } $(ajax.element).on(elementSettings.event, function (event) { if (!drupalSettings.ajaxTrustedUrl[ajax.url] && !Drupal.url.isLocal(ajax.url)) {