3

我正在使用 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,我已经为此工作了很长时间。

提前致谢!

4

3 回答 3

4

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

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

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

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

于 2010-03-24T00:47:42.683 回答
1

从服务器端传递 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
}
于 2011-03-31T06:02:21.387 回答
0

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

来源 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 {

在您的成功处理程序中:

于 2015-07-14T12:27:27.603 回答