2016-06-11 4 views
1

이 코드는 TypeError를 던지고 있습니다. 아이디어는 원격 외부 서버에서 소금을 가져 와서 암호에 추가하고 해시를 생성하는 것입니다. 문제는 코드가Ajax 호출 "TypeError : 객체가 함수가 아닙니다."예외

TypeError: object is not a function

다음은 index_user_scripts.js의 일부라는 형식 오류를 던지고있다.

/*jshint browser:true */ 
 
/*global localStorage, console, $ */ 
 
(function(){ 
 
"use strict"; 
 
/* 
 
* hook up event handlers 
 
*/ 
 
function register_event_handlers(){ 
 
    $(document).ready(function(){ 
 
     try { 
 
     if(!window.openDatabase) { 
 
      console.log('Local Databases are not supported by your browser.'); 
 
     } else { 
 
      var shortName = 'ChtrShk'; 
 
      var version = '1.0'; 
 
      var displayName = 'ChhatraSahayak'; 
 
      var maxSize = 2*1024*1024; 
 
      var db = window.openDatabase(shortName, version, displayName, maxSize); 
 
      } 
 
     } catch(e) { 
 
     if (e == 2) { 
 
      // Version mismatch. 
 
      console.log("Invalid database version."); 
 
     } else { 
 
      console.log("Unknown error "+ e +"."); 
 
     } 
 
     return; 
 
     } 
 
     if (localStorage.getItem("isLogged") === true){ 
 
     $("#cs_now")[0].click(); 
 
     }else{ 
 
     localStorage.clearData; 
 
     console.log("We haven\'t logged-in yet. Let\'s login."); 
 
     console.log(window.location.pathname); 
 
     window.location = "index.html#login"; 
 
     } 
 
    }); 
 
     /* button #login */ 
 
    $(document).on("click", "#signin", function(evt) 
 
    { 
 
     if ($("[name=lg_pass]")[0].value === "" || $("[name=lg_roll]")[0].value === ""){return false;} 
 
     console.log($("[name=lg_roll]")[0].value); 
 
     console.log($("[name=lg_pass]")[0].value); 
 
     var salt = ''; 
 
     try{ 
 
      $.ajax({ 
 
       async: true, 
 
       crossDomain: true, 
 
       url:"http://borngeek.tk/cs/in.php", 
 
       type:"POST", 
 
       dataType:"jsonp", 
 
       timeout: 5000, 
 
       success: function(response){ 
 
       salt = response._s; 
 
       console.log("Success: Fetched salt. " + salt); 
 
       }, 
 
       error: function(data){ 
 
       console.error("Error: Failed to fetch salt."); 
 
       } 
 
      }); 
 
     }catch(e){console.error(e.name + ": " + e.message);} 
 
     console.log("checkpoint."); 
 
     var passStr = $("[name=lg_pass]")[0].value.concat(salt); 
 
     passStr = hex_sha512(passStr); 
 
     console.log(passStr); 
 
     try{ 
 
     $.ajax({ 
 
      async: true, 
 
      crossDomain: true, 
 
      url:"http://borngeek.tk/cs/in.php", 
 
      type:"POST", 
 
      data:{"roll":$("[name=lg_roll]")[0].value, 
 
      "pass":passStr, 
 
      "salt":$("[name=lg_salt]")[0].value 
 
      }, 
 
      success: function(response){console.log("Login successful.");}, 
 
      error: function(response){console.log("Bad login attempt.");} 
 
     }); 
 
     }catch(e){console.error(e.name + ": " + e.message);} 
 
     console.log("Login Attempt."); 
 
     return false; 
 
    }); 
 
} 
 
document.addEventListener("app.Ready", register_event_handlers, false); 
 
})();

답변

0

그냥 기능을 통해 스캔은 window.openDatabase(...)이 가장 가능성이 후보 것 같아, 그 코드를 호출합니다. this similar question에 대한 허용 대답에보고 된 웹 SQL 데이터베이스 API가 광범위하게 지원되지 않습니다 보인다.

+0

는 예외 ') 다음 블록 '/ * 버튼 #login */' '$ (문서) CSTE 연구진 ("#signin"을 "클릭"기능 (EVT 내부 AJAX 호출에서 발생되고 'window.openDatabase (...) '을 제거하려고했으나 어쨌든 작동하지 않는 것 같습니다 :( – borngeek

+0

오,'hex_sha512'일까요? 정의되어있는 곳은? –

+0

다른 js에 정의되어 있습니다. index.html에 포함 시켰습니다. 추가 된 스크립트는 다음과 같습니다 : cordova.js, js/app.js, js/init-app.js, xdk/init-dev 의 .js, lib 디렉토리/jquery.min.js,,app_framework/3.0/appframework.ui.min.js, lib 디렉토리/appframework.js, JS/sha512.min.js, JS/index_user_scripts.js, 갤러리아/갤러리아-1.3.6.min.js, galleria/galleria.classic.min.js, galleria/galleria-startup.js, /app_framework/3.0/appframework.ui.min.js를 지원합니다. – borngeek

관련 문제