无法将带有html的php echoed数据提取到responseText中,返回到ajax表单

时间:2015-09-25 13:09:00

标签: php ajax

请有人帮我解决这个问题。我已经研究了好几天,我不能让包含html代码的php echoed数组格式化为javascript的responseText。 我试图用json_encode($ array)格式化回显数组但是不起作用。 我已经尝试了responseText.split(“”),然后使用for循环来提取数组中的html代码,但我也不能。 我知道javascript代码正常工作,因为我手动插入了这样的html代码: 即

responseText = '<p><img src="img/moon.png">here is your image</p>'

这很完美。但是当php吐出数组时,我在屏幕上看到的所有代码都是数组字。 我知道我的PHP代码也正常工作,因为我在使用POST方法发送文本之前测试了它。

感谢您的帮助。

我的ajax到php

<script>
    function ajaxObj( meth, url ) {

    var x = new XMLHttpRequest();

    x.open( meth, url, true );

    x.setRequestHeader("Content-type", "application/x-www-form-    urlencoded");

        return x;

    }

function ajaxReturn(x){

    if(x.readyState == 4 && x.status == 200){

    return true;

    }

}



</script>

<script>

function gotext(){

      var mm = document.getElementById("todotext").value;

      var isTr=false;

      var ajaxfile = ajaxObj("POST", "env.php");

      ajaxfile.onreadystatechange = function() {


         if(ajaxReturn(ajaxfile) == true) {


               document.getElementById("outputimgs").innerHTML = ajaxfile.responseText;


                 }

           }



    ajaxfile.send("todotext="+mm);
}



$(document).ready(function(){
$('form[name=uturn]').on('submit', function(e) {
     e.preventDefault();
     gotext();
    $('html, body').animate({
         scrollTop: $("#first").offset().top
    }, 1000);
    return false;
    });
});
</script>

<script> function ajaxObj( meth, url ) { var x = new XMLHttpRequest(); x.open( meth, url, true ); x.setRequestHeader("Content-type", "application/x-www-form- urlencoded"); return x; } function ajaxReturn(x){ if(x.readyState == 4 && x.status == 200){ return true; } } </script> <script> function gotext(){ var mm = document.getElementById("todotext").value; var isTr=false; var ajaxfile = ajaxObj("POST", "env.php"); ajaxfile.onreadystatechange = function() { if(ajaxReturn(ajaxfile) == true) { document.getElementById("outputimgs").innerHTML = ajaxfile.responseText; } } ajaxfile.send("todotext="+mm); } $(document).ready(function(){ $('form[name=uturn]').on('submit', function(e) { e.preventDefault(); gotext(); $('html, body').animate({ scrollTop: $("#first").offset().top }, 1000); return false; }); }); </script>

这是html表单

<form name="uturn" action="process.php" method="post">

<textarea id="todotext" name="text" placeholder="type or paste words here"></textarea><br/>


<input type="submit" id="arefbut" class="button scrolly" value="Convert"/>

</form>



        <!-- First -->


            <section id="first" class="main">


<div class="container">
                        <h2>Done !!</h2>
                <p id="outputimgs">end</p>
</div>

这是php中html的动态构造 <form name="uturn" action="process.php" method="post"> <textarea id="todotext" name="text" placeholder="type or paste words here"></textarea><br/> <input type="submit" id="arefbut" class="button scrolly" value="Convert"/> </form> <!-- First --> <section id="first" class="main"> <div class="container"> <h2>Done !!</h2> <p id="outputimgs">end</p> </div>

1 个答案:

答案 0 :(得分:0)

全部, 我找到了问题所在。就像我说的那样,进入网页的唯一内容是Array;该输出来自str_replace,后来在html代码中间更改为$ commentArray [$ i]以回显到responseText。我不得不添加这个for循环来修复它。我不知道更好的方法。其余的html被忽略了,为了解决这个问题,我添加了html_entity_decode函数。 最终代码如下所示。 现在一切都很完美。

请参阅此处添加的for循环

if(isset($_POST['todotext'])) {

$chunk = $_POST['todotext']; 

$text = explode(" ",$chunk);

$delimiter = array(" ",",",".","'","\"","|","\\","/",";",":","?",">","<","~","_","-","=","+","*","!","@","#","$","%","^","&","(",")");
$replace = str_replace($delimiter, $delimiter[0], $text);

for ($i=0; $i<count($replace); $i++)
{
if ($replace[$i]!==' ')
{
$newreplace .= $replace[$i].' ';
}
}

$newreplace = preg_replace('/\s+/', ' ', $newreplace );


$commentArray= explode($delimiter[0], $newreplace);

以下是$ commentArray

的新处理方法
for ( $i=0; $i<$counter;$i++)
{


    $commentArray[$i]= html_entity_decode('<p class="pos"><img src="imgs/black.png" width="40" height="40"><br>'.$commentArray[$i].'</p>');

    }

    $together = implode(" ",$commentArray);

    echo $together;
}