SCRIPT5009: „URLSearchParams“ ist in IE 11 nicht definiert

Lesezeit: 4 Minuten

Benutzer-Avatar
Narayan Adhikari

Ich versuche, die auszuführen URLSearchParams aber ich erhalte eine Fehlermeldung auf IE 11, da es dort nicht unterstützt wird. Es funktioniert perfekt in Chrome und Firefox.

Wie kann ich die entsprechende Funktionalität in IE 11 erhalten? Ich führe den Code in Laravel 5.4 aus.

Hier ist die Codezeile, die ich auszuführen versuche.

var urlParams = new URLSearchParams(window.location.search);

Fehler:

SCRIPT5009: „URLSearchParams“ ist nicht definiert

Benutzer-Avatar
Narayan Adhikari

Ich habe eine Lösung erhalten, indem ich den Code durch Folgendes ersetzt habe:

$.urlParam = function(name){
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
    if (results == null){
       return null;
    }
    else {
       return decodeURI(results[1]) || 0;
    }
}

Also zum Beispiel “example.com?param1=name&param2=&id=6”

$.urlParam('param1');  // name
$.urlParam('id');      // 6
$.urlParam('param2');  // null

  • Hallo, ich verstehe nicht, wie Sie es geschafft haben, dem Parameter „param1“ den Wert „name“ zuzuweisen, der für alle anderen Parameter gleich ist. Können Sie das bitte erklären? In meinem Fall habe ich: var parameters = new URLSearchParams(); and a function setProfile(value){ parameters.append("ProfileId", value); } Vielen Dank

    – Daniele

    20. November 2019 um 17:28 Uhr


  • Ich verstehe nicht wirklich, wie Leute Lösungen in Regex finden können. Danke vielmals! Hat mir Zeit gespart.

    – Naseem Ahamed

    23. September 2021 um 11:59 Uhr

Odhikaris Antwort als (teilweise) Polyfill:

(function (w) {

    w.URLSearchParams = w.URLSearchParams || function (searchString) {
        var self = this;
        self.searchString = searchString;
        self.get = function (name) {
            var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(self.searchString);
            if (results == null) {
                return null;
            }
            else {
                return decodeURI(results[1]) || 0;
            }
        };
    }

})(window)

  • Gut, weil keine neue Funktion erstellt, sondern eine fehlende implementiert wird, sodass Kopieren und Einfügen für alle funktionieren sollte.

    – Adam Bubela

    25. Januar 2019 um 15:58 Uhr


  • Verwenden decodeURIComponent Anstatt von decodeURI ist eine vollständigere Lösung, würde ich sagen.

    – Stepan

    6. August 2019 um 8:52 Uhr

  • Ich mag diesen Ansatz jedoch, wenn Sie append verwenden müssen (dh URLSearchParams.append() es funktioniert nicht.

    – Brent O’Connor

    20. November 2019 um 17:25 Uhr

  • Daher “teilweise”.

    – Andy Tau

    21. November 2019 um 18:12 Uhr

  • Sie können Unterstützung für hinzufügen has() -Methode zur Antwort von @AndyTaw hinzufügen, indem Sie dies unter der self.get-Definition hinzufügen: self.has = function (name) { var results = new RegExp('[\?&]' + name).exec(self.searchString); if (results == null) { return null; } else { return true; }} und Sie können Unterstützung für andere Methoden hinzufügen (wie z append() nach Bedarf in ähnlicher Weise.

    – Rick Gladwin

    10. Juli 2020 um 17:06 Uhr


Benutzer-Avatar
akuji1993

Falls das jemand in 2019 findet, Corejs unterstützt jetzt auch URLSearchParams als Polyfill, man kann also einfach bei Corejs bleiben und muss nicht selbst etwas zusammenbrauen.

import 'core-js/features/url-search-params';

https://github.com/zloirock/core-js#url-and-urlsearchparams

  • Arbeitet für Angular. Vielen Dank

    – Felix

    9. März 2020 um 20:23 Uhr

  • Funktioniert mit JQuery. Toodle Pip!

    – Design von Adrian

    25. Mai 2020 um 14:53 Uhr

  • Welche Version von Core-js ist dafür erforderlich?

    – LadegerätIIC

    11. August 2020 um 22:13 Uhr

Ich konnte dies mit lösen URL-Suchparameter-Polyfill. Importieren Sie einfach in die Datei, in der Sie URLSearchParams verwenden:

import 'url-search-params-polyfill';

Und Ihre bestehenden Verweise auf URLSearchParams sollten jetzt funktionieren!

Ich hatte ein ähnliches Problem beim Versuch, es zu verwenden URLSearchParams beim Versuch, eine zu machen AXIOS Posten Sie, wenn Sie Internet Explorer verwenden. Es weicht also ein wenig von Ihrer Beschreibung ab, aber ich möchte meine Lösung hier posten, nur für den Fall.

Hier ist meins AXIOS Postcode von meiner React-App, die für Edge, Chrome und Firefox gut funktioniert, aber im IE gibt es mir den Fehler

SCRIPT5009: URLSearchParams ist nicht definiert

:

        let axiosConfig = {
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
            }
        };            
        // Putting together the data to be passed to local servlet.
        const params = new URLSearchParams();
        params.append('var1', this.state.data1);
        params.append('var2', this.state.data2);

        var urlToPost="https://localhost:8080/someLocalServlet/doSomething";

        var self = this;  
        axios.post(urlToPost, params, axiosConfig)
            .then((res) => {
                // Handling Response from Servlet.
                console.log("AXIOS POST RESPONSE RECEIVED: ", res);

            })
            .catch((err) => {
                // Handler exception error thrown by Servlet.
                console.log("AXIOS POST ERROR: ", err);

            })     

Um es mit dem IE zum Laufen zu bringen, habe ich verwendet jQuery um die Post zu machen und benutzte a Var Objekt statt URLSearchParams. Die folgende if-Anweisung prüft, ob sich der Benutzer im IE befindet:

    if((navigator.userAgent.indexOf("MSIE") !== -1 ) || (!!document.documentMode === true )) { //IF IE > 10
        var myObject = {
            var1: this.state.data1,
            var2: this.state.data2
        };
        var urlToPostTo = 'https://localhost:8080/someLocalServlet/doSomething';

        $.post(urlToPost, myObject, 
            function(result) {  
                alert( "success" );
            })
              .done(function(result) {
                alert( "second success" );
              })
              .fail(function(result) {
                alert( "error" );
              })
              .always(function(result) {
                    alert( "finished" );
              });        
    } else {
       // use the AXIOS POST code above
    }

Um die jQuery zu bekommen, musste ich tun

npm installiert jquery

Dann habe ich zusätzlich zu meiner React-Datei Folgendes importiert:

import $ from 'jquery'; 
import { polyfill } from 'es6-promise'; polyfill();

Benutzer-Avatar
Bulut Ağırman

class UrlSearchParams {
  constructor(query) {
    this.query = query;
  }
  getSearchObject = () => {
    const { query } = this;
    return query
    ? (/^[?#]/.test(query) ? query.slice(1) : query)
      .split("&")
      .reduce((params, param) => {
        let [key, value] = param.split("=");
        params[key] = value
          ? decodeURIComponent(value.replace(/\+/g, " "))
          : "";
        return params;
      }, {})
  : {};
  };
  getAll = () => {
    const searchParams = this.getSearchObject();
    return searchParams;
  }
  get = param => {
    const searchParams = this.getSearchObject();
    return searchParams[param];
  };
  setUrl = (param, value) => {
    const searchParams = this.getSearchObject();
    searchParams[param] = value;
    return Object.keys(searchParams)
    .map(key => key + "=" + searchParams[key])
    .join("&");
  };
}

export default UrlSearchParams;

1283490cookie-checkSCRIPT5009: „URLSearchParams“ ist in IE 11 nicht definiert

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy