Dlaczego muszę wykonać dwa razy parseJson i jak to ominąć?

0

W selekcie wybieramy sobie jakąś opcję i po submit dodawany jest odpowiedni filtr (ten ktory wybralismy), calosc jest trzymana w ciachu.

Robię sobie taką operację:

		(function($){
			var filterManager = {
				filters: [],
				init: function() {
					this.getFilters();
					this.bind();
					this.displayFilters();
				},
				resetFilters: function() {
					document.cookie = 'debt_filters=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
				},
				getFilters: function () {
					var nameEQ = "debt_filters=",
					ca = document.cookie.split(';'),
					json_str;
					for(var i=0;i < ca.length;i++) {
						var c = ca[i];
						while (c.charAt(0)==' ') c = c.substring(1,c.length);
						if (c.indexOf(nameEQ) == 0) json_str = c.substring(nameEQ.length,c.length);
					}
					this.filters = typeof json_str === "undefined" ? [] : $.parseJSON($.parseJSON(json_str));
				},
				setFilter: function () {
					var json_str = JSON.stringify(this.filters);
					document.cookie = 'debt_filters'+"="+json_str+"; expires=''; path=/_cms2/debt_collection/invoice_list.php";
				},
				displayFilters: function() {
					var $container = $(".debt_filters"),
					f = this.filters;
					for(var i = 0; i < f.length; i++) {
						$container.find("[id*='" + f[i] + "']").closest('.form_group').css('display', 'inline-block');
					}
				},
				bind: function() {
					var self = this;
					var $container = $(".action_block"); 

					$("#debt_collection_search").click(function(e) {
						var $select = $container.find("#add_filter");
						var id = $select.val()
						self.filters.push(id);
						self.setFilter();
					});
				}													
			};

			filterManager.init();
		})(jQuery);

Tak jak w temacie, nie mam zielonego pojęcia jak znaleźc inne rozwiązanie tej sytuacji..

0

console.log Ci zabrali?
Skoro jest taka potrzeba to po prostu gdzieś dwa razy "stringifujesz" tą wartość, to ją potem musisz dwa razy odkodowac. Z kodu nie widzę, żeby tak wynikało, ale kodu w tej postaci nie mam na czym uruchomić, więc za Ciebie console.loga użyć nie mogę.

Swoją drogą - dlaczego raz natywny JSON, a raz jQuery'owy?

0

Nie zabrali, siedziałem nad tym spory kawałek czasu i dopiero tutaj napisałem. Jak zrobiłem:

var json = "[\"xxx\"]";
$.parseJSON("[\"xxx\"]"); // dostaje obiekt
$.parseJSON(json); // dostaje string ["xxx"]
0

A w jakiej przeglądarce? o.O

Sprawdziłem na Chromium i Firefox i takiego zachowania nie ma.

0

Na chromie :D Przed this.filters = typeof json_str === "undefined" ? [] : $.parseJSON($.parseJSON(json_str)); to wrzuciłem (może coś powaliłem w poście wyżej, bo pisałem to trochę później niż testowałem), ale sprawdzałem to na tysiąc sposobów i otrzymywałem takie durne wyniki. No nic jak znajdę rozwiązanie to dam znać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1