我有一个一般信息表。当我单击提交时,所有值都使用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');
}
}
答案 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;
}
}
}