>

데이터 소스에서 데이터를 가져 오기 위해 ajax를 사용하고 있습니다. 개발자 도구는 ajax GET 작업이 올바른 데이터를 리턴하고 있음을 보여 주지만 html 페이지에 표시하기 위해 데이터에 액세스하려는 시도가 작동하지 않습니다. 왜 그런지 알 수 있습니까?

잘 작동하는 다른 응용 프로그램에서 코드를 복사 했으므로 작동한다고 생각했을 것입니다.하지만 어딘가에 오류가 있었지만 어디를 볼 수 없습니다.

AJAX Get 호출에서 반환 된 JSON 코드는 다음과 같습니다.

[{"LINKSCATEGORYNAME":"Client Sites (local)","LINKSCATEGORYID":8},
{"LINKSCATEGORYNAME":"CMS (Local)","LINKSCATEGORYID":41},
{"LINKSCATEGORYNAME":"Music Library and Playlists","LINKSCATEGORYID":24},
{"LINKSCATEGORYNAME":"Our Sites (Local)","LINKSCATEGORYID":7},
{"LINKSCATEGORYNAME":"Radio Prep","LINKSCATEGORYID":18},
{"LINKSCATEGORYNAME":"Stats Reports","LINKSCATEGORYID":17}]

그리고 여기 내 시도가 있습니다

$.getJSON("linksdaoproxy.cfc?method=getCategoriesForMajorCatID&returnformat=json",{"argsLinksMajorCategoryID":selectedID}, function(res,code) {
          var newoptions = "";
            for(var i=0; i<res.DATA.length; i++) {
                newoptions += "<option value=\"" + res.DATA[i] + "\">" + res.DATA[i] + "</option>";
            $("#LinksCategoryID").children().end().append(newoptions);
        });

콘솔의 오류는 다음과 같습니다.

EditLinkbean.cfm:200 Uncaught TypeError: Cannot read property 'length' of undefined

그리고 참조 된 줄은 for (var ... 함수가있는 줄입니다.


  • 답변 # 1

    이것이 당신이 원하는 것 같아요. 그것은 DATA 에 액세스하지 않습니다  재산 (귀하의 반환에 존재하지 않기 때문에 (배열이기 때문에 존재조차 할 수 없음)

    $.getJSON("linksdaoproxy.cfc?method=getCategoriesForMajorCatID&returnformat=json",{"argsLinksMajorCategoryID":selectedID}, function(res,code) {
        var newoptions = "";
        for(var i=0; i<res.length; i++) {
            newoptions += "<option value=\"" + res[i].LINKSCATEGORYID + "\">" + res[i].LINKSCATEGORYNAME + "</option>";
        }
        $("#LinksCategoryID").children().end().append(newoptions);
    });
    
    

  • 답변 # 2

    여기에 몇 가지 문제가 있습니다 :

    DATA 가 없습니다  JSON의 속성이 AJAX 요청에서 반환되면 res 에 액세스 할 수 있습니다  직접.

    즉, 루프에서 객체의 속성을 검색해야합니다. 와이즈 비즈  그리고 LINKSCATEGORYNAME  객체 자체가 아닌 생성 한 HTML 문자열로 연결합니다.

    당신의 LINKSCATEGORYID  루프는 for 를 닫을 필요가 없습니다

    와이즈 비즈  통화는 루프 밖으로 나가야합니다.

    말한대로 다음을 시도하십시오 :

    )
    
    
    append()
    
    

    또한 var res = [{ "LINKSCATEGORYNAME": "Client Sites (local)", "LINKSCATEGORYID": 8 }, { "LINKSCATEGORYNAME": "CMS (Local)", "LINKSCATEGORYID": 41 }, { "LINKSCATEGORYNAME": "Music Library and Playlists", "LINKSCATEGORYID": 24 }, { "LINKSCATEGORYNAME": "Our Sites (Local)", "LINKSCATEGORYID": 7 }, { "LINKSCATEGORYNAME": "Radio Prep", "LINKSCATEGORYID": 18 }, { "LINKSCATEGORYNAME": "Stats Reports", "LINKSCATEGORYID": 17 }] //$.getJSON("linksdaoproxy.cfc?method=getCategoriesForMajorCatID&returnformat=json", { "argsLinksMajorCategoryID": selectedID }, function(res, code) { var newoptions = ""; for (var i = 0; i < res.length; i++) { newoptions += '<option value="' + res[i].LINKSCATEGORYID + '">' + res[i].LINKSCATEGORYNAME + '</option>'; } $("#LinksCategoryID").append(newoptions); //}); 를 사용할 수 있습니다.  콜백의 로직을 좀 더 간결하게 만드는 템플릿 리터럴. 그러나 후자는 IE에서 지원되지 않습니다.

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <select id="LinksCategoryID"></select>
    
    

  • 답변 # 3

    귀하의 DATA를   와이즈 비즈

    는 null이므로 .length의 (DATA-undefined)를 읽을 수 없다는 널 포인터입니다.

    (향후 정보를 위해 오해의 소지가 있음) 와이즈 비즈

    {RESULT : [yourarray]}와 같은 것을 반환 해보십시오

    map()

관련 자료

  • 이전 javascript - typescript 파일에서 js 함수를 호출하는 방법은 무엇입니까?
  • 다음 amazon web services - Terraform 수를 사용하지만 태그가 다른 여러 RDS 인스턴스 생성