x-editable的成功回调无效

时间:2014-03-23 12:01:52

标签: javascript php html x-editable

我已经能够成功实现x-editable来创建新用户并随后将更改发布到数据库。在这方面一切都很好。

我想使用字段的数字输入并对其进行一些算术运算,并将结果显示在不同的div中。

我创造了这个小提琴:http://jsfiddle.net/Mdcfh/

显示我的设置。这个小提琴工作正常,但是当我在我的代码中实现完全相同时,回调中没有任何反应。

我在下面附上我的代码的相关部分:

HTML

<div id="msg_units" style="display:none">Saved!</div>
<table class="table table-condensed table-hover">
<thead>
<tr>
<td class="text-left hide800"><strong>Name</strong></td>
<td class="text-center"><strong>Price</strong></td>
<td class="text-center"><strong>Quantity</strong></td>
<td class="text-right"><strong>Totals</strong></td>
</tr>
</thead>
<tbody>
<tr>                         
<td class="text-left hide800"><?php echo $_REQUEST['title']?></td>
<td class="text-center"><i class="fa fa-inr"></i><strong><span class="price"     id="unit_cost"><?php echo $_REQUEST['cost']?></span></strong></td>
<td class="text-center"><a href="#" class="myeditable qty" id="num_units" data-type="text" data-pk="3" data-name="num_units" data-title="How many are going?"></a></td>
<td class="text-right"><i class="fa fa-inr"></i><strong><a href="#" id="exp_total"></a>        </strong></td>
</tr></tbody></table>

JS

//editables 
$('#num_units').editable({
 url: 'post.php',
 ajaxOptions: { dataType: 'json' },
display: function(value, response) {
return false;   //disable this method
},
success: function(response, newValue) {
      var current_pk = $(this).data('pk');
      $('#exp_total').html(3*7200);
        $('#msg_units').text(current_pk).show();
        if (response && response.units) {
        $('#msg_units').text(response.units*5).show();
    }   
}
});

post.php中

$result = mysql_query('update mytable set '.mysql_escape_string($name).'="'.mysql_escape_string($value).'" where id = "'.mysql_escape_string($pk).'"');

  $yes[] = array(
    'success' => 'true',
    'msg' => 'update success for',
    'value' => $value
    );

  if ($result != false) {
    // echo json_encode($yes);
    echo '{"units": "3"}';
    // echo '{"success": "true"}';
  } else {
    $no[] = array(
      'success' => 'false',
      'msg' => 'update failed for' .mysql_escape_string($name),
      'value' => $value
      );
    echo json_encode($no);
  }

post.php代码正常运行,我的所有可编辑内容都已成功更新。但我根本无法成功回调。成功回调中写的所有语句都不起作用(尽管它们在浏览器控制台中工作)。

这是使用真实代码的另一个小提琴。小提琴:http://jsfiddle.net/8meZ8/1/

我对此很新,我确信有一些明显的遗漏。任何帮助将不胜感激!在此先感谢!!

@brutallord的更新

我在post.php中使用它来生成响应:

  $yes[] = array(
    'success' => 'true',
    'msg' => 'update success for',
    'value' => $value
    );

  if ($result != false) {
    echo json_encode($yes);
    //echo '{"units": 3}';
    // echo '{"success": "true"}';
  } else {
    $no[] = array(
      'success' => 'false',
      'msg' => 'update failed for' .mysql_escape_string($name),
      'value' => $value
      );
    echo json_encode($no);
  }

我想强调一点,提交新用户的工作正常。在这种情况下,我发布到另一个文件newuser.php,该文件发送响应如下:

if ($result != false) {
     echo '{"id": '. mysql_insert_id() .'}';
} else {
     echo "Error:" . $maxid . $_POST['buyer_email'] . $_POST['buyer_contact_no'] . $_POST['buyer_full_name'];
}

newuser的成功回调函数就像具有上述响应的魅力一样。

3 个答案:

答案 0 :(得分:3)

我找到了解决方案:

这是Javascript代码流的一个明显错误。可编辑似乎特别挑剔。以适当的顺序移动代码块(可编辑的声明)(按照预期的运行顺序),一切都像魅力一样开始工作。

特殊情况需要突出显示 - 如果可以在代码中提前编辑,则

$(selector).editable({
url: 'post.php',
})

确保验证/成功/错误代码位于其下方,以避免像我所面临的代码流问题。理想情况下建议跳过单独的初始化。只需在开头声明全局变量,然后使用下面的可编辑。

感谢大家的回应。

答案 1 :(得分:1)

似乎是这样,成功回调使用来自服务器的答案作为JSON,但可能你还没有发送:

header('Content-type:application/json')

答案 2 :(得分:0)

<?php
$yes = array('success' => true,'msg'=>'Done');
$no = array('success' => false,'msg'=>'no');

header('Content-type:application/json');
echo json_encode($yes);

和js代码

$('tr #name,tr #job').editable({
    type:'text',
    ajaxOptions: { dataType: 'json' },
    url: 'editable-request/update-trainee.php',
    display: function(value, response) {
    return false;   //disable this method
  },
    success: function(response, newValue) {
if(!response.success) {
  return response.msg;
}else{
  alert(response.msg);
 } });

这对我有用