Předcházení problémů s jQuery.ajaxSetup a dataType: „json“

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
toka
Člen | 253
+
0
-

Zdravím,
řešil jsem dost dlouho problém, proč mi nefungoval AJAX ve formuláři, abych mohl upravovat obsah selectu. Firebug pořád hlásil chybu. Sice se mi dařilo vrácenou hodnotu vypsat pomocí alert(...), ale přiřadit obsah proměnné do selectu již vyhazovalo výjimku.

Nevím jestli to lze nazvat chybou, ale „zakopaný pes“ byl v souboru jquery.nette.js na řádku 32:

jQuery.ajaxSetup({
  success: jQuery.netteCallback,
  dataType: "json"
});

Zde bylo nutné zrušit globální nastavení dataType. Pak již následující konstrukce fungovala skvěle:

function loadItems(value) {
  $.get("?do=loadData&presenter=IS%3AMenu", {"value": value}, function(data) {
    $('#frmformItem-parameters').replaceWith(data);
  });
}

Vše ale není stále tak růžové, jak vypadá :-) Chyba se záhy objeví při pokusu použít DataGrid. Zde je potřeba nahradit $.get za $.getJSON, tedy řádek 45 v souboru datagrid.js:

$("table.datagrid a.datagrid-ajax").live("click", function () {
  $.getJSON(this.href);
  return false;
}

Snad se bude někomu hodit. Při použití jiných pluginů může být náhrad $.get za $.getJSON více. Rád uvítám jiná, lepší, řešení, pokud někdo má.

EDIT:
A nebo se na vše vyprdnout, lépe studovat dokumentaci, a zapsat $.get takto:

function loadItems(value) {
  $.get("?do=loadData&presenter=IS%3AMenu", {"value": value}, function(data) {
    $('#frmformItem-parameters').replaceWith(data);
  }, "html");
}

Aspoň jsem se poučil :-)

EDIT2:
Akorát nedokáži předat pak hodnotu z „dynamického“ selectu dál. Vždy je obsah NULL, jediné, co pomáhá je vytáhnout požadovaný výsledek takto:

$postValues = $this->presenter->getRequest()->getPost();

A proto se ptám, proč se to nepřenese normálně přes $formValues = $form->getValues();?

Editoval toka (2. 2. 2010 9:16)

Honza Marek
Člen | 1664
+
0
-

Nj, na to globální nastavení typu je potřeba myslet, no..