SCRIPT5009: „URLSearchParams“ ist in IE 11 nicht definiert
Lesezeit: 4 Minuten
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
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¶m2=&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
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.
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: