2017-03-03 29 views
5

Tôi nhận được không xác định cho biến được gọi là: tên Bất kỳ trợ giúp nào về lý do tại sao nó không hiển thị kết quả. Nó sẽ hiển thị trong nhật ký nhưng không hiển thị trên index.html hoặc phía web sau khi tìm kiếm được nhấn.Biến trả về không xác định

mã:

// var names =[]; //I tried using a global variable but with no luck 
 

 
function SearchFiles(searchTerm) { 
 
    var searchFor = "title contains '" + searchTerm + "'"; 
 
    var owneris = "and '[email protected]' in Owners"; 
 

 
    var names = []; 
 
    var fileIds = []; 
 
    Logger.log(searchFor + " " + owneris); 
 
    var files = DriveApp.searchFiles(searchFor + " " + owneris); 
 
    while (files.hasNext()) { 
 
    var file = files.next(); 
 
    var fileId = file.getId(); // To get FileId of the file 
 
    fileIds.push(fileId); 
 
    var name = file.getName(); 
 
    names.push(name); 
 
    } 
 

 
    for (var i = 0; i < names.length; i++) { 
 
    //this is showing in the Logger 
 
    Logger.log(names[i]); 
 
    Logger.log("https://drive.google.com/uc?export=download&id=" + fileIds[i]); 
 
    } 
 

 
} 
 

 
function returnNames(names) { 
 
    return '<h3><b>returnNames has ran.!</b></h3> <br>' + names; // Why does this names variable return undefined??? 
 

 
} 
 

 
function doGet(e) { 
 
    var template = HtmlService.createTemplateFromFile('Index'); 
 
    return template.evaluate() 
 
    .setTitle('Search Drive') 
 
    .setSandboxMode(HtmlService.SandboxMode.IFRAME); 
 
} 
 

 

 
function processForm(searchTerm) { 
 
    var resultToReturn; 
 
    Logger.log('processForm was called! ' + searchTerm); 
 
    resultToReturn = SearchFiles(searchTerm); 
 
    Logger.log('resultToReturn: ' + resultToReturn) 
 
    // shows as undefined in the logger 
 
    return resultToReturn; 
 
}
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <base target="_top"> 
 
    <script> 
 
    function displayMessage() { 
 
     var searchTerm; 
 
     searchTerm = document.getElementById('idSrchTerm').value; 
 

 
     console.log('searchTerm: ' + searchTerm); 
 

 
     google.script.run.processForm(searchTerm); 
 
     google.script.run.withSuccessHandler(handleResults).returnNames(); 
 
    } 
 

 

 
    function handleResults(searchTerm) { 
 

 
     console.log('Handle Results was called! '); 
 
     document.writeln(searchTerm); 
 
    } 
 
    </script> 
 
</head> 
 

 
<body> 
 
    <input type="text" id="idSrchTerm" name="search"> 
 
    <input type="button" value="submitButton" name="submitButton" onclick="displayMessage()" /> 
 

 
</body> 
 

 
</html>

+1

bạn nhận được lỗi ở dòng nào? Điều đó có thể giúp gỡ lỗi vấn đề. – Rikin

+0

Tôi nhận được không xác định trên hàm returnNames (tên) line- bạn có thể thấy tôi đã nhận xét dòng – OblongMedulla

+2

nhiều vấn đề. Đầu tiên trong chỉ số gọi bạn không phải là đi qua bất cứ điều gì để returnNames(). Vì vậy, khi chức năng chạy nó được undefined và có thể in undefined. Thứ hai tôi nghĩ rằng bạn đang giả sử tên sẽ có sẵn trên toàn cầu mà tôi không nhìn thấy nó. – Rikin

Trả lời

3

Tôi nghĩ rằng bạn đang làm nó một cách sai lầm. Nó sẽ có tác dụng nếu bạn quay lại returnNames(names) vào cuối SearchFiles và bạn chỉ cần gọi google.script.run.withSuccessHandler(handleResults).processForm(searchTerm); bên index.html của bạn như thế này:

Code.gs

function SearchFiles(searchTerm) { 
    var searchFor = "title contains '" + searchTerm + "'"; 
    var owneris = "and '[email protected]' in Owners"; 

    var names = []; 
    var fileIds = []; 
    Logger.log(searchFor + " " + owneris); 
    //Logger.log(searchFor); 
    var files = DriveApp.searchFiles(searchFor + " " + owneris); 
    //var files = DriveApp.searchFiles(searchFor); 
    while (files.hasNext()) { 
    var file = files.next(); 
    var fileId = file.getId(); // To get FileId of the file 
    fileIds.push(fileId); 
    var name = file.getName(); 
    names.push(name); 
    } 

    for (var i = 0; i < names.length; i++) { 
    //this is showing in the Logger 
    Logger.log(names[i]); 
    Logger.log("https://drive.google.com/uc?export=download&id=" + fileIds[i]); 
    } 

    return returnNames(names); // Here call directly returnNames and get the wanted result 
} 

function returnNames(names) { 
    var result = '<h3><b>returnNames has ran.!</b></h3> <br>'; // + names; // Why does this names variable return undefined??? 
    result += '<div>names.length = '+names.length+'</div>'; 

    for(var i=0; i<names.length; i++) { 
    result += '<div>'+names[i]+'</div>'; 
    } 

    return result; 
} 

function doGet(e) { 
    var template = HtmlService.createTemplateFromFile('Index'); 
    return template.evaluate() 
    .setTitle('Search Drive') 
    .setSandboxMode(HtmlService.SandboxMode.IFRAME); 
} 

function processForm(searchTerm) { 
    var resultToReturn; 
    Logger.log('processForm was called! ' + searchTerm); 
    resultToReturn = SearchFiles(searchTerm); 
    Logger.log('resultToReturn: ' + resultToReturn) 
    // shows as undefined in the logger 
    return resultToReturn; 
} 

index.html

<!DOCTYPE html> 
<html> 

<head> 
    <base target="_top"> 
    <script> 
    function displayMessage() { 
     var searchTerm; 
     searchTerm = document.getElementById('idSrchTerm').value; 

     console.log('searchTerm: ' + searchTerm); 

     //google.script.run.processForm(searchTerm); 
     //google.script.run.withSuccessHandler(handleResults).returnNames(); 
     google.script.run.withSuccessHandler(handleResults).processForm(searchTerm); 
    } 

    function handleResults(searchTerm) { 
     console.log('Handle Results was called! '); 
     document.writeln(searchTerm); 
    } 
    </script> 
</head> 

<body> 
    <input type="text" id="idSrchTerm" name="search"> 
    <input type="button" value="submitButton" name="submitButton" onclick="displayMessage()" /> 
</body> 

</html> 

Ảnh chụp màn hình kết quả của các tệp của tôi bằng cụm từ "test":

Screenshot working

+0

Công trình này! Cảm ơn bạn đã giúp đỡ!! – OblongMedulla

1

Bạn có thể thử theo cách này để vượt qua xung quanh tên để kịch bản google của bạn.

Trong SearchFiles (searchTerm) bạn trả về tên (có thể là mảng trống hoặc mảng có giá trị có tên trong đó).

// var names =[]; //I tried using a global variable but with no luck 
 
var Logger = { 
 
    log: function(){ 
 
    console.log(arguments[0]); 
 
    } 
 
}; 
 

 
function SearchFiles(searchTerm) { 
 
    var searchFor = "title contains '" + searchTerm + "'"; 
 
    var owneris = "and '[email protected]' in Owners"; 
 

 
    var names = ["file1","file2","file3"]; 
 
    var fileIds = []; 
 
    Logger.log(searchFor + " " + owneris); 
 
/* var files = DriveApp.searchFiles(searchFor + " " + owneris); 
 
    while (files.hasNext()) { 
 
    var file = files.next(); 
 
    var fileId = file.getId(); // To get FileId of the file 
 
    fileIds.push(fileId); 
 
    var name = file.getName(); 
 
    names.push(name); 
 
    }*/ 
 

 
    for (var i = 0; i < names.length; i++) { 
 
    //this is showing in the Logger 
 
    Logger.log(names[i]); 
 
    Logger.log("https://drive.google.com/uc?export=download&id=" + fileIds[i]); 
 
    } 
 

 
    return names; 
 
} 
 

 
function returnNames(names) { 
 
    return '<h3><b>returnNames has ran.!</b></h3> <br>' + names; // Why does this names variable return undefined??? 
 

 
} 
 

 
function doGet(e) { 
 
    var template = HtmlService.createTemplateFromFile('Index'); 
 
    return template.evaluate() 
 
    .setTitle('Search Drive') 
 
    .setSandboxMode(HtmlService.SandboxMode.IFRAME); 
 
} 
 

 

 
function processForm(searchTerm) { 
 
    var resultToReturn; 
 
    Logger.log('processForm was called! ' + searchTerm); 
 
    resultToReturn = SearchFiles(searchTerm); 
 
    Logger.log('resultToReturn: ' + resultToReturn) 
 
    // shows as undefined in the logger 
 
    return resultToReturn; 
 
}
<!DOCTYPE html> 
 
<html> 
 

 
<head> 
 
    <base target="_top"> 
 
    <script> 
 
    function displayMessage() { 
 
     var searchTerm; 
 
     searchTerm = "DUMMY TEXT";//document.getElementById('idSrchTerm').value; 
 

 
     console.log('searchTerm: ' + searchTerm); 
 

 
     //google.script.run.processForm(searchTerm); 
 
     //google.script.run 
 
     //.withSuccessHandler(handleResults) 
 
     //.returnNames(google.script.run.processForm(searchTerm)); 
 
     processForm(searchTerm); 
 
    } 
 

 

 
    function handleResults(searchTerm) { 
 

 
     console.log('Handle Results was called! '); 
 
     document.writeln(searchTerm); 
 
    } 
 
    </script> 
 
</head> 
 

 
<body> 
 
    <input type="text" id="idSrchTerm" name="search"> 
 
    <input type="button" value="submitButton" name="submitButton" onclick="displayMessage()" /> 
 

 
</body> 
 

 
</html>

+0

giá trị trả về của nó cho tôi, bất kỳ suy nghĩ nào? – OblongMedulla

+1

Tôi đã sửa đổi mã một chút để xem nó có chạy hay không. Nếu bạn đang theo cùng một mã được đăng ở trên thì có thể cơ chế đọc tệp của bạn đang gặp sự cố. Đặt trình gỡ lỗi lên đó để tìm hiểu. – Rikin

+0

Nó cho thấy processForm không được xác định trong nhật ký console. – OblongMedulla

Các vấn đề liên quan