在我的jquery函数中获取每个错误

时间:2015-03-06 16:47:13

标签: javascript jquery ajax

我编写了一个简单的函数来使用我多次使用的相同代码库来构建表单。在这种形式中,我添加了一个选择对象。一切正常,除了选择对象不起作用。我正在使用ajax函数从数据库表中调用数据。在进行故障排除时,我正在获取数据 回来看看Chrome上的网络,但在控制台中我收到错误: 未捕获的TypeError:无法读取未定义的属性“长度”。 这是从ajax调用返回的数据。

{"oshadaytype":[
{"oshadaytypeid":3,"oshadaytype":"Job Transfer"},
{"oshadaytypeid":2,"oshadaytype":"Light Days"},
{"oshadaytypeid":1,"oshadaytype":"Lost Days"} 
]}

这是jquery函数。一切正常,除了我得到空的选择对象。

$(function(){
    $("#addoshadaysbutton").click(function(){
        $.ajax({type:   "GET",url:    '../posttimetosession.php'}).done();
        $("#addoshadaysdiv").empty();
        $.ajax({type:   "GET",url:    '../json/getoshadayjson.php'}).done(function(data){
            $("#addoshadaysdiv").append(
                $('<div>').append(
                    $('<label>').text("OSHA Days").addClass("rmargin3 subtitle")
                ).addClass("paddingbottom3")   
            ).append(
                $('<div>').append(
                    $('<input>').prop({type:"submit",name:"addoshadayssubmit",value:"Save OSHA Days"}).addClass("button")
                ).addClass("paddingbottom3")
            ).append(
                $('<div>').append(
                    $('<label>').prop({for:"oshastartdate"}).text("Start Date:").addClass("rmargin3")
                ).append(
                    $('<input>').attr({type: 'text',id: 'oshastartdate',name: 'oshastartdate'}).addClass("datepick eighth rmargin10")
                ).append(
                    $('<label>').prop({for:"oshaenddate"}).text("End Date:").addClass("rmargin3")
                ).append(
                    $('<input>').attr({type: 'text',id: 'oshaenddate',name: 'oshaenddate'}).addClass("datepick eighth rmargin10")
                ).append(
                    $('<label>').prop({for:"oshadaytypeid"}).text("OSHA Days Type:").addClass("rmargin3")
                ).append(
                    $('<select>').attr({id: "oshadaytypeid",name: "oshadaytypeid"})
                )                 
            )
            $.each(data.oshadaytype,function(key,value){
                $("#oshadaytypeid").append(
                    $('<option>').prop({value:value.oshadaytypeid}).text(value.oshadaytype)
                )   
            })       
        });
    })
})

错误指向每个函数的开头。

$.each(data.oshadaytype,function(index,value)

对此有任何想法。它必须是简单的东西。 这是php代码。

unset($_SESSION['oshadays']);
$appquery = "select * from hrs.oshadaytypes order by oshadaytype";
$results=sqlsrv_query($link,$appquery,array(),array( "Scrollable" => 'static' )) or die('Cannot get the nonemployee record');  
if(sqlsrv_has_rows($results)){
    while($row = sqlsrv_fetch_array($results,SQLSRV_FETCH_ASSOC)){
        $_SESSION['oshadays']['oshadaytype'][]=$row;        
    }
}
echo json_encode($_SESSION['oshadays']);

2 个答案:

答案 0 :(得分:2)

这里的所有假设。返回的数据看起来像JSON字符串。因此,您有两个选择。

1

设置ajax调用的数据类型:

$.ajax({type: "GET", dataType: 'json', url: '../json/getoshadayjson.php'}).done(function(data){

Beacuse dataType是您期望从服务器返回的数据类型。如果没有指定,jQuery将尝试根据响应的MIME类型推断它。

2:

Parse the JSON String

var _data = $.parseJSON(data);
$.each(_data.oshadaytype,function(key,value){

答案 1 :(得分:1)

只是一个猜测,但是由于某些原因,AJAX返回数据可能没有被解析为JSON,并且仍然是一个字符串。那么data.oshadaytype将是未定义的。试试这个:

$.each(JSON.parse(data).oshadaytype,function(key,value){