2012-07-04 4 views
3

아래 js 및 qunit 테스트가 있습니다. 왜 브라우저가 나에게 listClasses가 정의되지 않았습니까? 그것을 해결하는 방법. 나는 대부분 그랬다.자바 스크립트에서 함수가 정의되지 않았습니다.

function ajax() { 
$.ajax({ 
});} 

그러나 내가 아래 테스트를하는 방법을 좋아한다면?

$('#MregisteredClasses').on('pageinit', function listClasses(){ 
var rowInput = "1"; 
var pageInput = "1"; 

$.ajax({ 
    url: 'http://137.57.102.146:8080/Training/getRegisteredClassesData.html', 
    data: ({rows : rowInput , page : pageInput}), 
    type: 'POST', 

    success: function(json_results){ 
    $('#list').append('<ul data-role="listview" data-inset="true"</ul>'); 
     listItems = $('#list').find('ul'); 
     $.each(json_results.rows, function(key) { 
      html = "<li data-mini='true' id='icon'><a href='http://137.57.102.146:8080/Training/MRegisteredClassesDetail.phone?courseId=" 
        + [json_results.rows[key].courseId] + "&regNo=" + [json_results.rows[key].regNo] + 
        "' rel='external'>" + json_results.rows[key].courseName+ "</a>" 
        + "<a href='http://137.57.102.146:8080/Training/MRateCourse.phone?courseId=" 
        + [json_results.rows[key].courseId] + "&regNo=" + [json_results.rows[key].regNo] + 
        "' rel='external'>RATE THIS COURSE</a></li>" ; 
      listItems.append(html); 
     }); 

     $('#list ul').listview(); 
    }, 
}); 
}); 

는 이것은

test('asynchronous test', function() { 
// Pause the test, and fail it if start() isn't called after one second 
stop(); 

listClasses(function() { 
    // ...asynchronous assertions 
    ok(true, "Success"); 
}); 

setTimeout(function() { 
    start(); 
}, 2000); 
}); 

답변

0

$('#MregisteredClasses').on('pageinit', function listClasses(){ ...가 잘못된 사용입니다 qunit 테스트를합니다.

이 함수는 익명이어야합니다 (즉, listClasses 비트 삭제). listClasses()을 실행하면 오류가 발생합니다.

함수 선언을 외부화해야합니다.

즉 :

function listClasses(){ 
    var rowInput = "1"; 
    var pageInput = "1"; 

    $.ajax({ 
    url: 'http://137.57.102.146:8080/Training/getRegisteredClassesData.html', 
    data: ({rows : rowInput , page : pageInput}), 
    type: 'POST', 

    success: function(json_results){ 
    $('#list').append('<ul data-role="listview" data-inset="true"</ul>'); 
     listItems = $('#list').find('ul'); 
     $.each(json_results.rows, function(key) { 
      html = "<li data-mini='true' id='icon'><a href='http://137.57.102.146:8080/Training/MRegisteredClassesDetail.phone?courseId=" 
        + [json_results.rows[key].courseId] + "&regNo=" + [json_results.rows[key].regNo] + 
        "' rel='external'>" + json_results.rows[key].courseName+ "</a>" 
        + "<a href='http://137.57.102.146:8080/Training/MRateCourse.phone?courseId=" 
        + [json_results.rows[key].courseId] + "&regNo=" + [json_results.rows[key].regNo] + 
        "' rel='external'>RATE THIS COURSE</a></li>" ; 
      listItems.append(html); 
     }); 

     $('#list ul').listview(); 
    } 
}); 
} 

는 그 다음 on 명령에서 함수를 호출 :

$('#MregisteredClasses').on('pageinit', listClasses) 

스크립트는 listClasses()에 실패 가정, 그럼 나는 listClasses 이름 그냥 자동으로 삭제한다고 가정합니다.

+0

조 보먼 :이 오류 catch되지 않은 형식 오류를 표시보다 내가 통해 UR 대답을 시도 : \t http://137.57.102.146:8080/Training/js/MRegisteredClasses : 개체 [개체 개체]있는 방법 '목록보기' 소스가 없습니다. js : 23 – sone

+0

오류가 말하기 때문에,'$ ('list ul')'에 의해 반환 된 객체는'listview()'함수를 가지고 있지 않습니다. listview는 어디에 정의되어 있습니까? –

+0

$ ('# list ul'). listview(); 이것은 listview를 정의하지 않습니까? – sone

1

사이에는 a difference이 있고, 함수식은입니다.

선언의 형식은 :

function myFunc() { 
    /* body */ 
} 

표현이 다른 모든 것들입니다 :

함수 표현식은 function 키워드 후 이름이
var x = function myFunc() { 
    /* body */ 
}; 

// or 

alert(function myFunc() { 
    /* body */ 
}); 

, 함수가이 이름으로 액세스 할 수 있습니다 만 함수 본문 내부. 그러므로 당신 문제.

var x = function myFunc() { 
    /* body */ 
}; 

x(); // okay 
myFunc(); // reference error 

자세한 내용은 Named function expressions demystified.

관련 문제