前提・実現したいこと(10/23修正)
(修正版)
下記ソースコードから、
そのデータが削除できるかどうかの処理(消してはいけないデータがあるため)を
「ajaxRun.check(rowiddata);」で確認して、
そのチェックがtrueだった場合に、
削除確認ダイアログ(~のデータを削除しますか?)を表示し、
「はい」を選んだ場合に
「ajaxRun.delete(rowiddata);」の処理を行いたいです。
(修正前)
下記ソースコード
ajaxRun.check(rowiddata);
を実行後に、
swal内の
ajaxRun.delete(rowiddata);
を実行したいです。
Promiseを使用するといただき、
試してみたのですが、
出来ずに困っています。
発生している問題・エラーメッセージ(10/23修正)
(修正版)
「ajaxRun.check(rowiddata);」でひっかかった(削除してはいけないデータ)場合に、
先に「ajaxRun.check(rowiddata);」のアラートが出なければいけないのに、
一瞬「ajaxRun.delete(rowiddata);」のアラートが出てきてしまいます。
(修正前)
ほんの一瞬、
ajaxRun.delete(rowiddata);
の「コード:"" のデータを削除しますか?」メッセージ(アラート)が出てきてから、
ajaxRun.delete(rowiddata);
の「このコードは使用中のため削除できません」のメッセージ(アラート)
が出てきます。
(スクショ取ろうと試みましたが、できませんでした)
該当のソースコード
JavaScript
1 2var rowiddata = $(this).data("row-id"); 3 4ajaxRun.check(rowiddata); 5 6 swal({ 7 title: "コード:" + $(this).data("row-id") + " のデータを削除しますか?", 8 type: 'warning', 9 showCancelButton: true, 10 confirmButtonColor: '#3085d6', 11 cancelButtonColor: '#d33' 12 }).then(function (result) { 13 if (result.value) { 14 ajaxRun.delete(rowiddata); 15 swal({ 16 title: '削除しました', 17 type: 'success' 18 }).then(function () { 19 location.reload(); 20 }) 21 } 22 else { 23 swal({ 24 title: '削除しませんでした', 25 type: 'error' 26 }).then(function () { 27 location.reload(); 28 }) 29 } 30 }) 31
JavaScript
1var ajaxRun = { 2 //削除 3 delete: function (rowiddata) { 4 var Delete_id = rowiddata 5 var Delete_class = "削除"; 6 7 $.ajax({ 8 type: "post", 9 url: "test.ashx?Method=delete", 10 async: true, 11 data: { 12 req: JSON.stringify({ 13 Delete_id: Delete_id, 14 Delete_class: Delete_class 15 }) 16 }, 17 dataType: 'json', 18 beforeSend: function () { 19 common.elementsToDisabled(); 20 } 21 }) 22 .done(function (json) { 23 if (json.result === "OK") { 24 } 25 else if (json.result === "NoRecord") { 26 swal("データがありません", "", "error"); 27 return false; 28 } 29 else { 30 swal("削除出来ませんでした", "", "error"); 31 return false; 32 } 33 }) 34 .fail(function () { 35 swal("削除出来ませんでした", "", "error"); 36 return false; 37 }); 38 }, 39 //チェック 40 check: function (rowiddata) { 41 var Check_id = rowiddata; 42 43 $.ajax({ 44 type: "post", 45 url: "test.ashx?Method=check", 46 async: true, 47 data: { 48 req: JSON.stringify({ 49 Check_id: Check_id, 50 }) 51 }, 52 dataType: 'json', 53 beforeSend: function () { 54 common.elementsToDisabled(); 55 } 56 }) 57 .done(function (json) { 58 if (json.result === "OK") { 59 } 60 else if (json.result === "NoRecord") { 61 swal("このコードは使用中のため削除できません", "", "error"); 62 return false; 63 } 64 else { 65 swal("失敗しました", "", "error"); 66 return false; 67 } 68 }) 69 .fail(function () { 70 swal("データがみつかりませんでした", "", "error"); 71 return false; 72 }); 73 return; 74 } 75} 76
試したこと
var checkmanage = ajaxRun.check(rowiddata);
のように各自var化して、
setTimeout(checkmanage, 1000);
とsetTimeoutしてみても、反応せず。
ajaxRun.delete(rowiddata)をfunctionで括り、
それをvar化して
setTimeoutで行ってみると、
ajaxRun.checkcheck(rowiddata)の処理のみが行われました。
補足情報(FW/ツールのバージョンなど)
使用
sweetalert2 v7.26.29
visual studio 2017
追記(10/11)
コメントにて、
Promiseを使用するとあったので
試しに
JavaScript
1var rowiddata = $(this).data("row-id"); 2 3let promise = new Promise((resolve, reject) => { // #1 4 console.log("#1") 5 resolve(ajaxRun.check(rowiddata)) 6}) 7 8var swaldelete = swal({ 9 title: "コード:" + $(this).data("row-id") + " のデータを削除しますか?", 10 type: 'question', 11 showCancelButton: true, 12 confirmButtonText: 'はい', 13 confirmButtonColor: '#3085d6', 14 cancelButtonText: 'いいえ', 15 cancelButtonColor: '#d33' 16}).then(function (result) { 17 if (result.value) { 18 ajaxRun.delete(rowiddata); 19 swal({ 20 title: '削除しました', 21 type: 'success' 22 }).then(function () { 23 location.reload(); 24 }) 25 } 26 else { 27 swal({ 28 title: '削除しませんでした', 29 type: 'warning' 30 }).then(function () { 31 location.reload(); 32 }) 33 } 34}) 35 36promise.then((msg) => { // #2 37 return new Promise((resolve, reject) => { 38 setTimeout(() => { 39 console.log("#2") 40 resolve(swaldelete) 41 }, 10000) 42 }) 43}).then((msg) => { // #3 44 console.log('#3') 45 console.log(msg) 46}).catch(() => { // エラーハンドリング 47 console.error('Something wrong!') 48})
をやってみましたが、何も変わりがありませんでした。
回答2件
あなたの回答
tips
プレビュー