Ajax没有完全将数据发布到php文件

时间:2016-07-14 13:54:50

标签: javascript php ajax

使用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:&quot;Verdana&quot;,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:&quot;Verdana&quot;,sans-serif">&nbsp;</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作为我的文本区域

如果有人可以帮我解决这个问题,我将非常感激。

3 个答案:

答案 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
    },
    ...