2012-07-04 1 views
3

J'ai ce test js et qunit ci-dessous. pourquoi le navigateur m'a donné le listClasses n'est pas défini? Comment le résoudre. J'ai vu surtout faitfonction en javascript n'est pas définie

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

mais si j'ai aimé comme ci-dessous comment faire le test?

$('#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(); 
    }, 
}); 
}); 

et ce test est QUnit

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); 
}); 

Répondre

0

$('#MregisteredClasses').on('pageinit', function listClasses(){ ... est l'utilisation incorrecte.

La fonction doit être anonyme (c'est-à-dire supprimer le bit listClasses), auquel cas l'exécution de listClasses() échouera.

Ce que vous devez faire est d'externaliser la déclaration de fonction.

i.e. .:

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

Ensuite, appelez la fonction de la commande on:

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

En supposant que votre script seulement échoué sur listClasses(), alors je suppose que le nom listClasses est silencieusement éliminés.

+0

Joe bowman: i essayer ur réponse qu'il affiche cette erreur Uncaught TypeError: Object [object Object] n'a pas de méthode 'listview' Source: \t http://137.57.102.146:8080/Training/js/MRegisteredClasses. js: 23 – sone

+0

Comme l'erreur l'indique, l'objet renvoyé par '$ ('# list ul')' n'a pas de fonction 'listview()'. Où est listview défini? –

+0

$ ('# liste ul'). Listview(); est-ce que ceci ne définit pas la listview? – sone

1

Il y a a difference entre déclaration fonction et expression de fonction nommée.

La déclaration est de la forme:

function myFunc() { 
    /* body */ 
} 

expressions sont tout le reste:

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

// or 

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

Lorsqu'une expression de fonction a un nom après le mot-clé function, la fonction est accessible par ce nom seulement à l'intérieur du corps de la fonction. D'où ton problème.

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

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

Plus d'info dans Named function expressions demystified.

Questions connexes