Ajax не запускает прототип - я думаю, что мне нужно сбросить или удалить метод javascript - что вызвало хаос! - PullRequest
0 голосов
/ 27 октября 2009

Я работаю с использованием библиотеки scriptaculous. Однако я сталкиваюсь с некоторыми проблемами с включением библиотеки JSON для библиотеки прототипов. Он автоматически добавляет методы toJSONSTring и parseJSONSTRING ко всем объектам, и это вызывает хаос в некоторых местах. Как будто я не могу использовать функцию Ajax Updater и подозреваю ее из-за этого метода toJSONSTring, который был присоединен к моему объекту параметров, который я передаю ему.

Есть ли в любом случае отключить или хотя бы каким-то образом удалить функцию, которая была добавлена ​​к объекту.

EDIT :::

На самом деле я пытаюсь сделать запрос AJAX, и я сталкиваюсь с проблемой в

Ajax.Updater = Class.create(Ajax.Request,....

часть библиотеки прототипов. В той части, где он должен выполнить и опубликовать AJAX-запрос, он этого не делает, особенно по адресу:

$super(url, options);

Чтобы быть точным, я использую эту сортируемую и редактируемую сетку таблицы здесь по этому адресу: http://cloud.millstream.com.au/millstream.com.au/upload/code/tablekit/index.html

Обычно вы нажимаете на ячейку таблицы, чтобы редактировать ее, и нажимаете кнопку OK для подтверждения. При нажатии на кнопку делается ajax-запрос.

Редактируемая функция таблицы вызывает функцию обновления Ajax следующим образом в функции отправки:

submit : function(cell, form) {
        var op = this.options;
        form = form ? form : cell.down('form');
        var head = $(TableKit.getHeaderCells(null, cell)[TableKit.getCellIndex(cell)]);
        var row = cell.up('tr');
        var table = cell.up('table');
        var ss = '&row=' + (TableKit.getRowIndex(row)+1) + '&cell=' + (TableKit.getCellIndex(cell)+1) + '&id=' + row.id + '&field=' + head.id + '&' + Form.serialize(form);


        this.ajax = new Ajax.Updater(cell, op.ajaxURI || TableKit.option('editAjaxURI', table.id)[0], Object.extend(op.ajaxOptions || TableKit.option('editAjaxOptions', table.id)[0], {
            postBody : ss,
            onComplete : function() {
                var data = TableKit.getCellData(cell);
                data.active = false;
                data.refresh = true; // mark cell cache for refreshing, in case cell contents has changed and sorting is applied
            }
        }));
    },

Проблема в том, что запрос никогда не выполняется, и я продолжаю нажимать кнопку ОК, но безрезультатно.

EDIT ::::::::::::::::

Я все еще нахожусь в тупике - я даже пытался вызвать функцию Ajax.Updater самостоятельно, и она не будет работать вообще. Похоже, эта функция официально внезапно оказалась бесполезной. Я внес изменения, которые вы сказали, но все безрезультатно :( Честно говоря, у меня нет вариантов здесь - еще одна идея - отказаться от этого набора и искать что-то еще, имеющее аналогичную функциональность в надежде, что ЭТО МОЖЕТ работать!

Ответы [ 3 ]

2 голосов
/ 27 октября 2009

Похоже, что эти методы добавляются в прототип Object. Добавляя к прототипу Object, библиотека автоматически предоставляет все методы, которые происходят от Object (другими словами, все), а также эти методы. Возможно, вы захотите немного почитать наследование прототипов в Javascript, чтобы лучше разобраться в этом.

В любом случае, вы можете удалить эти методы, выполнив следующее:

delete Object.prototype.toJSONString;
delete Object.prototype.parseJSONString;
1 голос
/ 27 октября 2009

Вы можете удалить что-нибудь из объекта, используя «delete»:

a.toJSON = function () {};
delete a.toJSON;
a.toJSON() => error: toJSON is not a function
a.toJSON => undefined

Однако я не думаю, что происходящее происходит из-за того, что, как вы думаете, происходит :) Может быть, расскажете подробнее о проблеме, с которой вы столкнулись в Ajax.Updater?


Видел редактирование. Хорошо, вы также можете опубликовать фактическую строку кода, которая вызывает Ajax.Updater, и, что также важно, подробно объяснить, как создается объект параметров, который вы передаете ему?

Также, пожалуйста, убедитесь, что вы делаете что-то вроде этого:

new Ajax.Updater(stuff)

и НЕ просто:

Ajax.Updater(stuff)

Вам НУЖНО создать новый объект Updater и использовать «новый» (скорее всего, вы уже это делаете, просто убедитесь).


ОК. Я до сих пор не уверен, что передается в ajax.Updater, поскольку вы расширяете то, что я не вижу, но попробуйте это: удалите «&» из начала переменной " сс "; в объекте параметров используйте параметры: сс вместо postBody: сс .

0 голосов
/ 27 октября 2009
delete obj.property

В этом случае:

delete obj.toJSONSTring;
delete obj.parseJSONSTRING;
...