Ajax返回一个未定义的值

时间:2014-03-13 07:54:23

标签: javascript php jquery ajax zend-framework

我有一个搜索功能,假设从数据库中搜索一个名字,然后当用户点击添加时,选择的项目必须出现在搜索字段下方,简而言之它必须回发以便用户可以从搜索元素中重新选择他/她的第二个选项,以便可以将所有选定的选项保存在数据库中。我面临的问题是,在我点击添加后,我将获取未定义的值而不是我选择的值,而我的响应是名称而不是ID号,这里是我的代码和下面的图片。

MODEL

public function getName($id)
    {
        $select = $this->select()
                         ->where('service_provider_id  LIKE "' . $id . '%"')
                         ->order('service_provider_name');
        return $this->fetchAll($select);
    }

CONTROLLER

  {
    $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();  
                      }               
                  });
                });

enter image description here

提前致谢

5 个答案:

答案 0 :(得分:0)

您正在寻找您要返回的数组中不存在的密钥尝试此

var row = '<tr><td>' + data['label'] + '</td></tr>';

或者这个

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

因为这些是您在PHP页面中定义的两个键

答案 1 :(得分:0)

您可以使用data["value"]代替data["serviceprovider"]

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

由于您已对包含三个键的数组进行了编码:labelvalueid。因此,此时Zend没有serviceprovider密钥进行编码。

答案 2 :(得分:0)

尝试

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

还尝试将alert()放在成功函数中,例如

alert(JSON.stringify(data));

并查看其中包含的内容..

答案 3 :(得分:0)

从我看到我认为你从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();  
                        }
                      }               
                  });
                });

答案 4 :(得分:0)

在您的控制器中尝试:

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