-1

「edit_body」フィールドを保存するブラウザスクリプトは次のとおりです。

<script>
$(document).ready(function(){
 $("#save_editable").click(function(){
  var edit_body = $("#edit_body").html();
  setTimeout(function(){
   $.ajax({
    url:'http://my-url.com/my_editor.php?id_to_update=123',
    type:'POST',
    data:{edit_body:edit_body},
    success:function(data){
     if(data=='1'){
      alert('Saved');
     }
    }
   });
  },5000);
 });
});
</script>

サーバーは次のことを行います。

if(@$_POST["edit_body"]){
 $id_to_update=intval($_GET['id_to_update']);
 $edit_body=iconv('UTF-8', 'windows-1251', html_entity_decode($_POST["edit_body"], ENT_QUOTES, "utf-8"));
 if(mysql_query(sprintf('update my_table set body="%s" where id="%s";',$edit_body,$id_to_update)){
  print '1';
 }
}

問題は次のとおりです。 「edit_body」に多くのテキストが含まれている場合、正常に保存されますが、完全なコンテンツは保存されません。ブラウザが弱いほど、保存されるテキストは少なくなります。この場合、5 秒の遅延で setTimeout 関数を作成しました。しかし、それは時々役に立ちません..

Ajaxが投稿する前に、変数「edit_body」の処理を待つようブラウザに指示するにはどうすればよいですか?

4

1 に答える 1

1

jQuery の html() メソッドの代わりに CKEditor の getData() メソッドを使用してドキュメントを取得することで解決された問題:

var edit_body = CKEDITOR.instances["edit_body"].getData();
于 2013-02-12T21:49:43.057 に答える