我有一个 php 函数,它返回如下所示的 json 数据:
if ($result !== false)
{
$resultdata = array(
'status' => true,
'error_msg'=>'',
'data' => $result
);
}
else
{
$resultdata = array(
'status' => false,
'error_msg'=>"Unable to reassign port vlan. Check Port mode.",
'data' => $result
);
}
header ('Content-Type: application/json; charset=UTF-8');
echo json_encode($resultdata);
模型中的数据 ($result) 是这样构建的:
$pattern = "/([0-9]+)(\s+)([0-9]+)(\s+)([a-z]+)(\s+)([a-z]+)(\s+)/i";
if (preg_match($pattern, $this->_data, $matches))
{
$vlandetailsArray['VlanId']= $matches[1];
$vlandetailsArray['Name']= $matches[3];
$vlandetailsArray['Egress']= $matches[5];
$vlandetailsArray['Type']= $matches[7];
}
我认为的代码如下所示:
$.ajax({
url:fullpath,
type:'POST',
dataType:'json',
success: function(returnDataFromController) {
console.log(returnDataFromController);
if (returnDataFromController.status == true)
{
//build table contents
var htmlstring = '<thead>';
htmlstring = htmlstring + '<tr>';
htmlstring = htmlstring + '<th>VlanId</th>';
htmlstring = htmlstring + '<th>Name</th>';
htmlstring = htmlstring + '<th>Egress Rule</th>';
htmlstring = htmlstring + '<th>Port Membership Type</th>';
htmlstring = htmlstring + '<tbody>';
//should only be one entry so no need to loop
// htmlstring = htmlstring + "<tr>"
//htmlstring = htmlstring + "<td class ='vlanid'>" + returnDataFromController.VlanId + "</td>";
//htmlstring = htmlstring + "<td>" + returnDataFromController.Name + "</td>";
//htmlstring = htmlstring + "<td>" + returnDataFromController.Egress + "</td>";
// htmlstring = htmlstring + "<td>" + returnDataFromController.Type +"</td>";
//htmlstring = htmlstring + "</tr>";
$('#assignedvlans').html(htmlstring);
$('#progress-indicator').hide();
}
else
{
alert('my error message: ' + returnDataFromController.error_msg);
}
},//end success
error: function(jqXHR, textStatus, errorThrown)
{
alert(errorThrown);
}
我想知道的是如何访问我的返回数组的“数据”部分和“error_msg”。现在,在执行 ajax 后,当状态为 false 时,出现的警报显示“我的错误消息:未定义”。但我没有收到有关“returnDataFromController.status”的任何错误消息
就数据而言,我尝试过:
returnDataFromController.data.VlanId
和
returnDataFromController["#data"].VlanId
但似乎都没有工作。当我没有返回数据周围的包装器数组时,被注释掉的代码曾经可以工作。我以前只是从控制器返回“$result”...
任何建议,将不胜感激。谢谢。
更新 1 顺便说一句,console.log 并没有真正帮助我。出于某种原因,在 Web 控制台中,我没有看到任何数据被转储在那里。我用的是火狐...
更新 2
当控制器为状态返回 true 时,这是我从 ajax 错误处理程序获得的错误消息:
SyntaxError: JSON.parse: 意外字符
我已更改我的代码以使用:
returnDataFromController.data.VlanId
更新 3
为了简化问题,我尝试使用更基本的代码来重现我的问题。为此,这是我的控制器:
public function test()
{
$mydata = array(
'VlanID'=>80,
'Name'=>'test vlan'
);
$data = array(
'status'=> true,
'error_msg'=>'all is well',
'data'=>$mydata
);
header ('Content-Type: application/json; charset=UTF-8');
echo json_encode($data);
}
这是我的观点:
$('#testbutton').click(function() {
$.ajax({
url:'http://myserver/myapp/index.php/controller/test/',
type:'POST',
dataType:'json',
success: function(returnDataFromController) {
alert('success');
console.log(returnDataFromController);
alert(returnDataFromController.data.VlanID);
},//end success
error: function(jqXHR, textStatus, errorThrown)
{
alert('ajax error handler: ' + errorThrown);
}
}); //end ajax call
当我单击测试按钮时,会发生以下情况: 1. 我收到第一个显示“成功”的警报。2. 没有任何内容写入控制台 3. 我在控制台中收到以下错误消息 - 当尝试执行第二个警报“TypeError:returnDataFromController.data 未定义”时。
希望这个例子能简化事情并帮助找出我哪里出错了。谢谢。
更新 4
当我添加:
alert(returnDataFromController.toSource());
我得到以下输出:
({VlanID:80, Name:"test vlan"})