Почему мой jQuery jEditable, обратный вызов редактирования на месте не работает? - PullRequest
3 голосов
/ 24 марта 2010

Я использую поле редактирования на месте jQuery jEditable, но когда функция JSON возвращается, и я пытаюсь вернуть значение из моего обратного вызова редактирования на месте, все, что я получаю, это вспышка

Вы можете увидеть это здесь ...

http://clareshilland.unknowndomain.co.uk/

Нажмите Ctrl + L, чтобы войти ...

Имя пользователя: stackoverflow
Пароль: jquery

Хотя вы можете увидеть скрипт в /script.js, здесь приведен основной код ...

$('#menu li a').editable(edit_menu_item, { cssclass: 'editable' });

Вот обратный вызов:

function edit_menu_item(value, settings) {

 $.ajax({
  type : "POST",
  cache : false,
  url  : 'ajax/menu/edit-category.php',
  dataType: 'json',
  data : { 'id': this.id, 'value': value },
  success : function(data) {

   if (data.status == 'ok') {
    alert('ok');
    return data.title;
   } else {
    alert('n/ok');
    return this.revert;   
   }

 }});

}

Код JSON находится здесь: ajax / menu.edit-category.php

Редактирование на месте находится в меню, в котором также есть сортируемый jQuery. Один клик для редактирования. Введите, чтобы сохранить, и он сохраняет данные, но не обновляет их в поле редактирования на месте.

Пожалуйста, помогите stackoverflow, я работаю над этим для мега-возраста.

Заранее спасибо!

Ответы [ 3 ]

4 голосов
/ 24 марта 2010

С редактируемой домашней страницы (http://www.appelsiini.net/projects/jeditable):

Обратите внимание, что функция должна возвращать строку. Обычно отредактированное содержимое. Это будет отображаться на странице после завершения редактирования.

edit_menu_item не возвращает строку - может показаться, что вы можете обойти это, возвращая значение, а затем, если вам нужно обновить фактическое содержимое, сделайте это при успешном обратном вызове вашего ajax-запроса. Возможно, вы также захотите добавитьобратный вызов ошибки, на всякий случай.

Альтернативой, которая, вероятно, является плохой идеей, было бы пометить ваш вызов ajax как синхронный (async: false) и посмотреть на responseText, но это заблокировало быстраницу, пока ваш запрос не будет завершен.

1 голос
/ 31 марта 2011

Передайте объект json со стороны сервера, который будет обрабатываться Javascript как текст. Вы должны проанализировать это для объекта json, используя var myObject = JSON.parse(myJSONtext);

PHP-код

$response = new stdClass();
$response->value = $value;
print_r(json_encode($response));

Js код

//(in Jeditable callback)
"callback": function( sValue, y ) {
    sValue = JSON.parse(sValue);
    //now you can access sValue.value
}
0 голосов
/ 14 июля 2015

У меня была та же проблема, и поэтому я изменил исходный код Jeditable, введя обратный вызов, чтобы я мог возвращать строковое значение из обработчика AJAX "succes".

Источник Jeditable до:

/* check if given target is function */
if ($.isFunction(settings.target)) {
  var str = settings.target.apply(self, [input.val(), settings]);
  $(self).html(str);
  self.editing = false;
} else {

Источник Jeditable после:

/* check if given target is function */
if ($.isFunction(settings.target)) {
        var edit = self;
        settings.target.apply(self, [input.val(), settings, function(str){
            $(edit).html(str);
            edit.editing = false;
        }
    ]);
} else {

В вашем обработчике succes:

...