dtwxmn8741 2018-09-20 16:47
浏览 121

带换行符的文本通过Ajax / JavaScript返回文本中的

Code that works fine except for the issue of passing a value back and forth between JavaScript, Ajax, and PHP. Using TinyMCE as the editor, when I add a paragraph break in the text, save the data (passing it through JavaScript/Ajax and PHP to do so) the text appears to be okay. Here's the JavaScript and Ajax code -- this works, it passes the data correctly to the PHP program when the submit button is clicked:

  // save the main who's who form data:
  $("form#who_main").submit(function(e)
  {
     e.preventDefault();

     // first thing, clear out the message div used for this (if there's anything there):
     document.getElementById("who_message").innerHTML = "";

     // because we're using TinyMCE, need to replace value in that into the textarea
     // so that when JavaScript gathers the formData it is getting it from the textarea
     // controls (it doesn't know what to do with TinyMCE):
     var shortbio = tinymce.get('shortbio').getContent();
     document.getElementById( "shortbio" ).value = shortbio;
     var user_notes = tinymce.get('user_notes').getContent();
     document.getElementById( "user_notes" ).value = user_notes;
     var admin_notes = tinymce.get('admin_notes').getContent();
     document.getElementById( "admin_notes" ).value = admin_notes;

     // this loads all the controls of the form rather than doing one at a time and fumbling
     // with the file object ...:
     var formData = new FormData(this);

     // ajax call to attempt to upload and save the image:
     $.ajax
     ({
        type: "POST",
        url: "<?php echo $History_html_RootPath; ?>admin/AjaxCalls/who_update_main_save.php",
        data: formData,
        dataType: "json", // return value is json array
        processData : false,
        contentType: false,
        success: function(data)
        {
           // need to see if we have an error, if so, display it, otherwise,
           // we should hopefully have success ...
           if ( data[0].toLowerCase().includes( "error" ) )
           {
              var errormsg = "<div class='alert alert-danger'>"+data+"</div>";
              document.getElementById("who_message").innerHTML = errormsg;
              return;
           }
           else
           {
              // success!

              // update things on screen, so we don't get confused using the data array returned
              // from PHP:
              document.getElementById("namecode").value                = data[0];
              document.getElementById("region").value                  = data[1];
              document.getElementById("local").value                   = data[2];
              document.getElementById("preferredtitle").value          = data[3];
              document.getElementById("shortbio").value                = data[4];
              tinymce.get('shortbio').setContent( data[4] );
              document.getElementById("headshotphoto").value           = data[5];
              document.getElementById("photographername").value        = data[6];
              document.getElementById("photographerlink").value        = data[7];
              document.getElementById("user_notes").value              = data[8];
              tinymce.get('user_notes').setContent( data[8] );
              document.getElementById("admin_notes").value             = data[9];
              tinymce.get('admin_notes').setContent( data[9] );

              // clear out the upload file control:
              //document.getElementById("headshotphoto").value           = "";

              // change the message:
              var message = "<div class='alert alert-success'>";
                  message += "<b>Success!</b> This data has been updated in the <i>holding</i> table.";
                  message += "</div>";
              document.getElementById("who_message").innerHTML = message;
              return;
           }
        }  // end success
     }); // end ajax call
  }) // end of code associated with who_main submit

The PHP file receives the data via post, and I use the PHP function mysqli_real_escape_string() to deal with issues. The one problem with doing this is that it appears to insert backslashes for quotes (single and double), and so on. I just had a thought that might be the cause of the problem, and that is the use of this function, I am not sure. I will test it, but in the meantime. ... I save the data to the table and all is good. If there's a paragraph break, the proper tags are saved out into the table. <p>Some text</p><p>More text 'quoted text'</p>

When I pass the data back using JSON encoding:

$returndata = array();
$returndata[0]  = $namecode;
$returndata[1]  = $region;
$returndata[2]  = $local;
$returndata[3] = $preferredtitle;
$returndata[4] = $shortbio;
$returndata[5] = $photo_file;
$returndata[6] = $photographername;
$returndata[7] = $photographerlink;
$returndata[8] = $user_notes;
$returndata[9] = $admin_notes;
// done-done:
echo json_encode( $returndata );
return;

The code above (the javascript/Ajax code) comes back looking like: <p>Some text</p> <p>More text \'quoted text\'</p>

I need to not have the and \' (or \") showing up in my text. If I were to save it again like that it gets weirder as the backslashes get duplicated and more. I am sure there's some thing I am missing, but I don't know what it is. This is making me crazy because everything else works exactly as I need it to.

NOTE Added code that I have attempted to use, in PHP, to deal with "escapes", it works for single and double quotes, but not for the characters -- instead it just strips out the backslash:

function remove_escapes( $string )
{
   $string = str_replace ( "\'", "&#039;", $string ); // convert single quote
   $string = str_replace ( "\"", "&quot;", $string ); // convert double-quote
   $string = str_replace ( "
", "", $string ); // remove 

   $string = str_replace ( "\\", "", $string ); // remove slash
   // anything else giving us heartburn?
   return $string;
} // eof: remove_escapes()

If I use this with the json array, I get the letters rn inserted between paragraphs:

$returndata[8] =  remove_escapes( $user_notes );
$returndata[9] =  remove_escapes( $admin_notes );
  • 写回答

4条回答 默认 最新

  • dongnanbi4942 2018-09-20 17:04
    关注

    maybe doing something like data.replace(/ /g, '<br>') this will replace all newline markers with the html newline or data.replace(/\ /g, '<br>') to look for the characters rather than a newline marker

    评论

报告相同问题?

悬赏问题

  • ¥50 comsol稳态求解器 找不到解,奇异矩阵有1个空方程返回的解不收敛。没有返回所有参数步长;pid控制
  • ¥15 怎么让wx群机器人发送音乐
  • ¥15 fesafe材料库问题
  • ¥35 beats蓝牙耳机怎么查看日志
  • ¥15 Fluent齿轮搅油
  • ¥15 八爪鱼爬数据为什么自己停了
  • ¥15 交替优化波束形成和ris反射角使保密速率最大化
  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功