Сообщение ajax не отправляется, когда в jquery UI запускается событие change - PullRequest
0 голосов
/ 29 мая 2011

Я вырезал части кода для удобства чтения.Приведенная ниже функция позиции выполняется, когда событие изменения инициируется путем перетаскивания дочернего элемента col_1:

$('#col_1').Sortable(
                    {
                        change:  positions,
                    }
                );

Проблема в том, что «позиции» отправляет сообщение ajax на сервер, который не проходит:

function positions(){

   **i've removed some javascript code leading to a javascript variable called "variable" ***

xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');
xmlhttp.open('POST', '/positions.php', true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send("epositions="+variable);
xmlhttp.send(null);


    return true;
}

Таким образом, сообщение не отправляется на сервер.Но я заметил, что если я вместо этого поставлю

  $('#col_1').Sortable(
                    {
                            change: function() { positions(); },
                    }
                );

Пост ajax будет отправлен, когда на дескрипторе дочернего узла в col_1 нажата кнопка, но элементы больше не могут быть отсортированы.

   change: function(data) { positions(); },

также не отправляет запрос ajax, хотя элементы отсортированы.

Как мне решить эту проблему?Я что-то не так делаю или проблема с сортируемым пользовательским интерфейсом?

Ответы [ 3 ]

0 голосов
/ 30 мая 2011

Да, я вижу, у меня есть другое подозрение (извините, если это не так).

Это подозрение, потому что я не вижу, где находится onreadystatechange в вашем коде.

Как вы уже знаете, именно onreadystatechange будет вызывать какую-то функцию, которая вам нравится, а не наоборот.

Я не понимаю, почему

xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');

должен быть внутри функции, это заставит вещи начать все сначала и обнаружит, что вы путешествуете через состояния до состояния 4 каждый раз, когда вы вызываете позиции,Если вы посмотрите на мой код, он не работает.Как вещи sepearetd в моем коде являются результатом тяжелой работы и могут сильно повлиять на вещи.

Также посмотрите, как и где используется onreadystatechange.

Это все, что я хотел упомянуть:

  1. Позаботьтесь о xml-запросе (вы хотите, чтобы он вызывался в самом начале только один раз), поэтому нахождение внутри функции нене выглядит хорошей идеей (еще хуже, если учесть переменные области видимости !!!!)

  2. Позаботьтесь о onreadystatechange и другом xml http-коде, вы хотите, чтобы он был в вашей функции, поэтому каждыйвремя приносит свежие результаты !!!

  3. Береги штаты!

Прошу понимания, если все это не так, иответ не поможет!

Что касается jquery, я его вообще не использую.

0 голосов
/ 30 мая 2011

Требуется ли для change обратного вызова return true; для работы?Если это так, вы можете обновить код для использования change: function(data) { return positions(); }

0 голосов
/ 29 мая 2011

Я поставил скрипт, который может вам помочь.Это полный пример, нажмите здесь: ПРИМЕР XML POST

(Например, поиск test.php )

...