如何在ajax中获取PHP数组作为responseText以便稍后将其从ajax传递到某些div

时间:2019-07-04 06:36:57

标签: javascript php json ajax codeigniter

我有一个一般信息表。当我单击提交时,所有值都使用javascript获取,并使用ajax将其发送到PHP函数。 PHP函数验证表单并返回 形式错误都作为数组 或成功的消息。

我想获取PHP在ajax端生成的数组,并将其传递给表单以在相应表单字段上显示错误。

我已经成功地在PHP中生成了错误数组。 print_r($ arrayname)将所有值显示为数组。 但是我不想显示,而是要将其传递给ajax并在div中检索该数组并对该数组进行处理。

--------- AJAX ------

function general()
{
        var xmlHttp = new XMLHttpRequest();
        xmlHttp.open('POST','addGeneral',true);
        var data = new FormData();
        data.append('title',document.getElementById('title').value);
        data.append('firstname',document.getElementById('firstname').value);
        data.append('middlename',document.getElementById('middlename').value);
        data.append('surname',document.getElementById('surname').value);
        xmlHttp.send(data);

        xmlHttp.onreadystatechange = function()
        {
            if(xmlHttp.readyState==4)
            {
              var status = xmlHttp.responseText;
               document.getElementById('responseG').style.display="block";
                     if(status=='true')
                     {
                        document.getElementById('responseG').className="alert alert-success";
                        document.getElementById('responseG').innerHTML="<p>Successfully Updated</p>";
                     }
                  else
                  {
                    document.getElementById('responseG').className="alert alert-danger";
                    document.getElementById('responseG').innerHTML=status;
                  }
            }
        }
}

---- PHP函数---

public function addGeneral()
{
        $status=array();
        extract($_POST);

        $this->form_validation->set_rules('title','Title','required',array('required' => 'You must provide a %s.'));
        $this->form_validation->set_rules('firstname','First Name','required');
        $this->form_validation->set_rules('middlename','Middle Name','required');
        $this->form_validation->set_rules('surname','Surname','required');

            if($this->form_validation->run()===FALSE)
            {
                $status=$this->form_validation->error_array();
            }else
            {
                $data=array(
                    'title'=>$title,
                    'firstname'=>$firstname,
                    'middlename'=>$middlename,
                    'surname'=>$surname
                );

                $this->Manage_employee_model->update_employee($data);
                $status=array('true');
            }
}

3 个答案:

答案 0 :(得分:0)

在完成所有检查并填充响应数组之后,在您的php代码中,只需执行简单的echo即可将数据返回到ajax

php中的示例:echo json_encode($status);

放置此代码的最佳位置是您的if语句下

答案 1 :(得分:0)

在表单上打印错误消息

                <?php  
            if(!empty(validation_errors())) {echo 
                validation_errors();}
            ?>

答案 2 :(得分:0)

一旦PHP脚本运行完毕并且浏览器收到HTML响应的结尾,就结束了,您不能直接修改已经发送了更多PHP的输出。您可以使用AJAX进行操作,以获取数据并使用JS在客户端进行渲染,或者在服务器端进行渲染,然后仅使用JS注入结果。

客户端渲染

为此,您只需要PHP脚本返回数据,然后循环遍历并将每个项目附加到JS中的div。用本机JS渲染事物有点尴尬,但是这种方法将演示文稿放在一个位置,而不是在后端添加HTML代码。

服务器端

$data=array(
    'title'=>$title,
    'firstname'=>$firstname,
    'middlename'=>$middlename,
    'surname'=>$surname
);

echo json_encode($data);

客户端

xmlHttp.onreadystatechange = function() {
    if(xmlHttp.readyState==4) {
      var data = JSON.parse(xmlHttp.responseText);
       document.getElementById('responseG').style.display="block";
             if(data.status=='true') {
                document.getElementById('responseG').className="alert alert-success";
                document.getElementById('responseG').innerHTML="<p>Successfully Updated</p>";
             }
          else {
            document.getElementById('responseG').className="alert alert-danger";
            for(var i = 0; i < data.length; i++){ 
                document.getElementById('responseG').innerHTML+= '<p>'+data[i]+'</p>;
            }
        }
    }
}

服务器渲染

这里,我们使用PHP在后端生成HTML字符串,通过AJAX发送回去,然后将其附加到客户端的div上。这里的缺点是将HTML模板与您的后端代码混合在一起。

服务器端

$data=array(
    'title'=>$title,
    'firstname'=>$firstname,
    'middlename'=>$middlename,
    'surname'=>$surname
);
$html = '';

foreach ($data as $key => $item) {
    $html += '<p>'.$item.'</p>';    
}

echo json_encode(array('html' => $html));

客户端

xmlHttp.onreadystatechange = function() {
    if(xmlHttp.readyState==4) {
      var data = JSON.parse(xmlHttp.responseText);
       document.getElementById('responseG').style.display="block";
             if(data.status=='true') {
                document.getElementById('responseG').className="alert alert-success";
                document.getElementById('responseG').innerHTML="<p>Successfully Updated</p>";
             }
          else {
            document.getElementById('responseG').className="alert alert-danger";
            document.getElementById('responseG').innerHTML = data.html;
        }
    }
}