Javascript 返回未定义值的Ajax

Javascript 返回未定义值的Ajax,javascript,php,jquery,ajax,zend-framework,Javascript,Php,Jquery,Ajax,Zend Framework,我有一个搜索功能,它假设从数据库中搜索一个名称,然后当用户单击“添加”时,选择项必须显示在搜索字段下方,简言之,它必须被发回,以便用户可以从搜索元素中重新选择他/她的第二个选项,以便所有选定的选项都可以保存在数据库中。我面临的问题是,当我点击add后,我得到了未定义的值,而不是我选择的值,我的回答是一个名称而不是Id号,下面是我的代码和图片 模型 控制器 { $id = $this->getRequest()->getParam('id'); $mdlservi

我有一个搜索功能,它假设从数据库中搜索一个名称,然后当用户单击“添加”时,选择项必须显示在搜索字段下方,简言之,它必须被发回,以便用户可以从搜索元素中重新选择他/她的第二个选项,以便所有选定的选项都可以保存在数据库中。我面临的问题是,当我点击add后,我得到了未定义的值,而不是我选择的值,我的回答是一个名称而不是Id号,下面是我的代码和图片

模型

控制器

  {
    $id = $this->getRequest()->getParam('id');

    $mdlserviceprovider = new Model_ServiceProviders();
    $serviceprovider  = $mdlserviceprovider ->getName($id);
    $arr_rtn = array();
    if (count($results) > 0){
        foreach($results as $result)
        {
            $myarr = array( 'label' => $result->service_provider_name,
                            'value'    => $result->service_provider_name,
                            'id' => $result->service_provider_id
                            );
            array_push($arr_rtn, $myarr);
        }
    }
    echo Zend_Json::encode($arr_rtn);
}
PHTML/AJAX

$('#add1').click(function(){


                  var data = {};
                  data['sp'] = $("#search").val();          

                  $.ajax({
                       url:'<?php echo $this->baseUrl()?>/ajax/postserviceprovider/id',
                       type:'post',
                       dataType: "json",
                       data: data,        
                       success:function(data){
                         var row = '<tr><td>' + data["serviceprovider"] + '</td></tr>';
                         $('#t1').append(row);
                        //alert();  
                      }               
                  });
                });


提前感谢

您正在查找返回的数组中不存在的密钥。请尝试此操作

var row = '<tr><td>' + data['label'] + '</td></tr>';
还是这个

var row = '<tr><td>' + data['value'] + '</td></tr>';
由于这是您在PHP页面中定义的两个键,您可以使用data[value]而不是data[serviceprovider]:

因为您已经对包含三个键的数组进行了编码:label、value和id。所以目前没有serviceprovider键可供Zend编码。

试试看

var row = '<tr><td>' + data[0].value + '</td></tr>';

查看其中包含的内容。

从我看到的内容来看,我认为您正在从php返回一个多维数组,因此我将在javascript中尝试以下内容:

$('#add1').click(function(){


                  var data = {};
                  data['sp'] = $("#search").val();          

                  $.ajax({
                       url:'<?php echo $this->baseUrl()?>/ajax/postserviceprovider/id',
                       type:'post',
                       dataType: "json",
                       data: data,        
                       success:function(data){
                         data.each(function(index, el){
                             var row = '<tr><td>' + el.label + '</td></tr>';
                             $('#t1').append(row);
                             //alert();  
                        }
                      }               
                  });
                });

在控制器中,请尝试:

$this->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
return $this->_helper->json(array('key1' => $val1, 'key2' => $val2, ...));

仍在获取未定义项将获取未定义项以使用数据[0]。值。还要确保$results包含值。请尝试使用var_dump$results或print_r$results进行检查。这次没有任何内容发回。我正在获取返回的空值。您的$arr\u rtn为空?否单击“添加”后发回的值为空控制器中的$id值是多少?您可以使用日志来查看它。假设从搜索元素中选择值
alert(JSON.stringify(data));
$('#add1').click(function(){


                  var data = {};
                  data['sp'] = $("#search").val();          

                  $.ajax({
                       url:'<?php echo $this->baseUrl()?>/ajax/postserviceprovider/id',
                       type:'post',
                       dataType: "json",
                       data: data,        
                       success:function(data){
                         data.each(function(index, el){
                             var row = '<tr><td>' + el.label + '</td></tr>';
                             $('#t1').append(row);
                             //alert();  
                        }
                      }               
                  });
                });
$this->disableLayout();
$this->_helper->viewRenderer->setNoRender(true);
return $this->_helper->json(array('key1' => $val1, 'key2' => $val2, ...));