2017-10-26 11 views
0

MobileFirst v7からv8へ移行したハイブリッドアプリをテストしています。Javascript tx.executeSql()hit TypeError:タイプエラー

今、私は更新ステートメントを実行しようとしたとき、私は "TypeError例外" を取得:

var db = openDatabase(); 
var addr1 = document.getElementById('Addr1').value; 
var addr2 = document.getElementById('Addr2').value; 
var addr3 = document.getElementById('Addr3').value; 
var id = document.getElementById('Id').value; 

db.transaction(function (tx) { 
    sqlupdate= "UPDATE Profile SET Addr1 = '" + addr1 + "', "; 
    sqlupdate= sqlupdate + " Addr2 = '" + addr2 + "', "; 
    sqlupdate= sqlupdate + " Addr3 = '" + addr3 + "' "; 
    sqlupdate= sqlupdate + " where Id ='" + id + "'"; 

    tx.executeSql(sqlupdate,errorOn,successOn); 
}); 

function errorOn() 
{ 
    alert("Error"); 
} 

function successOn() 
{ 
    alert("Profile Saved"); 
} 

enter image description here enter image description here

私はSELECTのためtx.executeSqlを()を実行すると問題なくINSERTよ、このエラーはUPDATEのときにのみ発生します。

誰でも私の間違いを指摘できますか?おかげさまで

+0

私は、エラーハンドラがいくつかの有用な情報とともに呼び出されるので、 "エラー"を警告するだけでなく、それらを使用することを確信しています... – Andreas

+0

こんにちはアンドレアス、あなたの提案のおかげでunforturnately実行はerrorOn折り返し電話。それはちょうどtx.executeSql()で停止し、私が持っている唯一の情報はコンソールからのエラーメッセージです。 –

答えて

0

Ok ...最後に私は答えを得ました。問題はここからです。

tx.executeSql(sqlupdate,errorOn,successOn); 

この関数は4つのパラメータを必要とするコールバックのポジションを切り替える必要があります。

tx.executeSql(sqlupdate,*[updateParams]*,successOn, errorOn); 

ので、解決策を次のようにコードを変更します:

db.transaction(function (tx) { 
    sqlupdate= "UPDATE Profile SET Addr1 = ?, "; 
    sqlupdate= sqlupdate + " Addr2 = ?, "; 
    sqlupdate= sqlupdate + " Addr3 = ? ; 
    sqlupdate= sqlupdate + " where Id =? "; 

    tx.executeSql(sqlupdate,[addr1, addr2, addr3, id],successOn, errorOn); 
}); 

コードの変更を最小限に抑えるために、SQLをそのままにして空の配列を配置して動作させることができます:

tx.executeSql(sqlupdate,[],successOn, errorOn);