0

我有一个 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"})
4

1 回答 1

0

尝试这个:

   $('#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.VlanID);
              },//end success
            error:  function(jqXHR, textStatus, errorThrown)
            {
                 alert('ajax error handler: ' + errorThrown);
            }                     
          }); //end ajax call  
于 2012-12-17T18:10:28.853 回答