为什么我的jQuery jEditable,就地编辑回调不起作用?

时间:2010-03-24 00:27:31

标签: jquery ajax json jeditable inline-editing

我正在使用jQuery jEditable在就地编辑字段,但是当JSON函数返回并且我尝试从我的编辑就地回调中返回一个值时,我得到的是一个闪存

你可以在这里看到......

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

按Ctrl + L登录...

用户名:stackoverflow
密码:jquery

虽然你可以看到/script.js中的脚本是主要代码exerpt ...

$('#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 个答案:

答案 0 :(得分:4)

从可编辑的主页(http://www.appelsiini.net/projects/jeditable):

  

请注意,函数必须返回字符串。   通常是编辑过的内容。这将   编辑后显示在页面上   完成。

edit_menu_item不返回字符串 - 看起来您可以通过返回值来解决这个问题,然后如果您需要更新实际内容,请在ajax请求的成功回调中执行此操作。您可能还想添加一个错误回调,以防万一。

另一种可能是个坏主意的方法是将你的ajax调用标记为同步(async:false)并查看responseText,但这会锁定页面直到你的请求完成。

答案 1 :(得分:1)

从服务器端传递json对象,这将被Javascript视为文本。您必须使用var myObject = JSON.parse(myJSONtext);

将其解析为json对象

PHP代码

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

Js Code

//(in Jeditable callback)
"callback": function( sValue, y ) {
    sValue = JSON.parse(sValue);
    //now you can access sValue.value
}

答案 2 :(得分:0)

我遇到了同样的问题,因此我通过引入回调修改了Jeditable源代码,以便我可以从AJAX“succes”处理程序中返回字符串值。

之前的来源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 {

来源Jeditable之后:

var fruits = []; 

var fruit = new Object; 
fruit.name = apple; 
fruit.color = red; 

fruits.push(fruit);

在你的成功处理程序中: