在我的 jquery 函数中得到一个错误

Getting an error on an each in my jquery function

本文关键字:一个 错误 jquery 我的 函数      更新时间:2023-09-26

我编写了一个简单的函数来构建一个表单,使用我多次使用的相同代码库。 在此表单中,我添加一个选择对象。 除了选择对象不工作之外,一切都有效。我正在使用 ajax 函数从数据库表中调用数据。故障排除时,我正在获取数据在Chrome上查看网络时返回,但在控制台中出现错误:未捕获的类型错误: 无法读取未定义的属性"长度"。下面是从 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']);

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

1:

设置 ajax 调用的数据类型:

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

Beacuse dataType 是您希望从服务器返回的数据类型。如果未指定任何内容,jQuery 将尝试根据响应的 MIME 类型进行推断。

阿拉伯数字:

解析 JSON 字符串

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

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

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