使用Ajax获取一个非常奇怪的错误,而不是将整个字符串数据发送到php脚本。
字符串是
"<p class="MsoNormal" style="text-align:justify"><b><u><span lang="DE" style="font-size:10.0pt;mso-bidi-font-size:11.0pt;
font-family:"Verdana",sans-serif;mso-ansi-language:DE">Gold GoldGold Gold Gold Gold<o:p></o:p></span></u></b></p>
<p class="MsoNormal" style="text-align:justify"><span lang="EN-GB" style="font-size:10.0pt;mso-bidi-font-size:11.0pt;font-family:"Verdana",sans-serif"> </span></p>"
但只有(通过数据库提交和php $结果测试才能看到php脚本。
"<p class="MsoNormal" style="text-align:justify"><b><u><span lang="DE" style="font-size:10.0pt;mso-bidi-font-size:11.0pt;
font-family:"
我试图通过多种方法检查为什么会发生这种情况,但根本无法弄明白。
这是我的Javascript代码和php代码。
JS:
function Send_upload_news()
{
get_title = document.getElementById('Germ_title');
get_date = document.getElementById('Germ_date');
input_title = get_title.value;
input_date = get_date.value;
input_content = $("div.nicEdit-main").html();
//console.log(input_content);
var Data = '&input_title='+input_title+'&input_date='+input_date+'&input_content='+input_content;
//console.log(Data);
$.ajax({
url : "uploadNews.php",
type: "POST",
dataType: 'text',
data : Data,
success: function(result){alert(result);},
/* success: function() {
alert('Post has been uploaded to Database');
}, */
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert('There is an error, screenshot this error and send to Admin : ' +textStatus+" - "+errorThrown);
}
});
nicEditors.findEditor( "Germ_content" ).setContent( '' );
get_title.value = "";
get_date.value = "";
$('html, body').animate({ scrollTop: 0 }, 'slow');
};
PHP:(uploadNews.php)
<?php
//Database info
$db_host = "localhost";
$db_username = "";
$db_pass = "";
$db_name = "";
//connect db
$connMS = new mysqli ( $db_host, $db_username, $db_pass, $db_name );
//grab data
$this_title = $_POST['input_title'];
$this_date = $_POST['input_date'];
$this_content = $_POST['input_content'];
$result = file_put_contents ( "test.txt", $this_content);
//create query and execute
$sqlupdate_news = "INSERT into news_content(germ_title, germ_date, germ_content) values ('$this_title','$this_date','$this_content')";
mysqli_query ($connMS,$sqlupdate_news);
//close
mysqli_close($connMS);
?>
我使用WYSWYG Nicedit作为我的文本区域
如果有人可以帮我解决这个问题,我将非常感激。
答案 0 :(得分:1)
您必须将发送的参数转义(编码)到服务器,以避免混淆字符,如&符号(&amp;)
改变这个:
var Data = '&input_title='+input_title+'&input_date='+input_date+'&input_content='+input_content;
对此:
var Data = '&input_title='+encodeURIComponent(input_title)+'&input_date='+encodeURIComponent(input_date)+'&input_content='+encodeURIComponent(input_content);
答案 1 :(得分:1)
您的代码存在的问题是您没有对值进行编码。所以这会弄乱价值观。另外,你有一个领先的&
没有任何意义。您可以使用encodeURIComponent手动编码所有值,也可以让jQuery为您处理。
jQuery在您使用对象时为您执行编码。
function Send_upload_news() {
var get_title = document.getElementById('Germ_title');
var get_date = document.getElementById('Germ_date');
var Data = {
input_title : get_title.value,
input_date : get_date.value,
input_content : $("div.nicEdit-main").html()
};
$.ajax({
url : "uploadNews.php",
type: "POST",
dataType: 'text',
data : Data,
success: function(result){alert(result);},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert('There is an error, screenshot this error and send to Admin : ' +textStatus+" - "+errorThrown);
}
});
nicEditors.findEditor( "Germ_content" ).setContent( '' );
get_title.value = "";
get_date.value = "";
$('html, body').animate({ scrollTop: 0 }, 'slow');
}
你真的应该使用var
,这样你的应用程序就不会充满全局变量。
答案 2 :(得分:0)
在关闭Ajax之前正确编码你的字符串。
var title = encodeURIComponent(input_title);
var date = encodeURIComponent(input_date);
var content = encodeURIComponent(input_content);
var Data = 'input_title='+title+'&input_date='+date+'&input_content='+content;
$.ajax({
...
data : Data,
...
为了让您的生活更轻松,为什么不使用对象表示法并让jQuery
处理编码?
$.ajax({
...
data : {
input_title: input_title,
input_date: input_date,
input_content: input_content
},
...