ajaxのデータで「smth [i]」を送信するにはどうすればよいですか? 私は、ajaxの前にvarを作ると最後のものになり、すべてのボタンは配列の最後の要素を送ります。ajaxの配列の要素をデータとして送信
答えて
インデックス付きのループをいじり避けるために、あなたは正規表現のアプローチを試みることができます、このような何か:
$('div')
.filter(function() {
return this.id.match(/^id\d+_del$/);
})
.click(function() {
let id = this.id.match(/id(\d+)_del/)[1];
$.ajax({
type: 'POST',
url: 'delete.php',
data: { filek: smth[id] },
success: function(html) {
console.log(html);
},
});
});
JSFiddle(XHRs用ネットワーク]タブを確認してください)
は、基本的には途中でいくつかの数を有する_del
で終わる、id
で始まるIDを持つすべてのdivをとり、 idから取得した番号を使用して、それぞれにajax呼び出しをバインドします。あなたはまだsmth
があなたが必要とするすべてのアイテムを持っていることを確認する必要がありますが、これは多くのクリーナーです。
これは言及したように、このようなトリックを使わずにより安全でスマートなソリューションを活用できるクラスとデータ属性をdivで使用することをお勧めします。
EDIT:
クラス/データアプローチ:
$('.del').click(function() {
let id = $(this).data('filek-id');
console.log(`Id: ${id}`);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="del" data-filek-id="0">Foo click me</div>
<div class="del" data-filek-id="1">Bar click me</div>
<div class="del" data-filek-id="2">Baz click me</div>
ありがとう。 "class = i"を設定してから をidofclass = this.classNameにします。 – KanekiSenpai
それはちょっと悪いです。私は私の答えをより明確に更新しました。 –
ハンドラがターゲット要素のIDを取得し、そこからi
を抽出することができます。
var smth = new Array("1","2","3");
for(var i=0;i<smth.length;i++){
$("#id"+i+"_del").click(function(){
var i = parseInt(this.id.substr(2), 10);
$.ajax({
type: 'POST',
url: 'delete.php',
data: {filek : smth[i]},
success: function(html){
console.log(html);
}
});
});
};
反復変数とクロージャの問題に他のより一般的なソリューションはここで見つけることができます:JavaScript closure inside loops – simple practical example
なぜ「i」を抽出するのですか? 'var i'を' let i'に置き換えれば、 'id'から' i'を得ることなく動作します。しかし、ループの全体は、私のopnionの悪い考えです。 jqueryはそれ自身でそれを反復処理します。その必要はありません。 –
はしないでくださいそのためにforループを使用し、番号付きIDは使用しないでください。あなたは、番号のIDを使用する必要がありますし、CSSクラスを追加することができない場合でも:あなたはループを必要としないので、ほんの始まりと終わりを確認してください。
var smth = ["1","2","3"];
$("[id^=id][id$=_del]").click(function(){
let i = parseInt(this.id.substr(2), 10);
$.ajax({
type: 'POST',
url: 'delete.php',
data: {filek : smth[i]},
success: function(html){
console.log(html);
}
});
};
OPでの質問は非常に多くのと何度も議論されました。問題の名前はループ内の非同期関数の実行です。 OPと間違っているものを
まず見て:
var smth = new Array("1","2","3");
for(var i=0;i<smth.length;i++){
$("#id"+i+"_del").click(function(){// i comes from the loop and is OK
$.ajax({
type: 'POST',
url: 'delete.php',
data: {filek : smth[i]},//the code runs *after* the loop is completed and **i** is 3 (in this case)
success: function(html){
console.log(html);
}
});
});
};
はどのようにそれを修正するには?
ES6の場合は問題ありません。エルス閉鎖Read documentation
for(let i=0;i<smth.length;i++){// i is scoped to the loop
// ^^^
// OP code
}
は、これは本当に効率的ではありませんソリューション
var smth = new Array("1","2","3");
for(var i=0;i<smth.length;i++){
(function(j){ // it is possible to use **i** but it will be different **i**
$("#id"+j+"_del").click(function(){//
$.ajax({
type: 'POST',
url: 'delete.php',
data: {filek : smth[j]},// j keeps the value
success: function(html){
console.log(html);
}
});
});})(i);
};
第3の解決策(クロージャよりも短い)は、関数に 'i'をバインドし、' this'を使ってそれにアクセスします –
- 1. $ .ajax()を介してフォーム要素と配列を送信
- 2. datatable ajax配列のデータ値を送信
- 3. オブジェクトの配列をajax投稿データとして送信しますか?
- 4. メソッド呼び出しの引数として配列の要素を送信
- 5. AJAX Laravelからの応答として配列を送信
- 6. PHP Ajax送信配列
- 7. ajaxを使用して要素idデータを送信できません
- 8. 送信データがhtmlデータのときにajaxリクエストを送信
- 9. Ajax - jQueryを使用してオブジェクトの配列を送信する
- 10. ajax経由でfetchAll配列を送信
- 11. AjaxでPHPスクリプトに配列を送信
- 12. postDataパラメータとして配列を送信
- 13. Ajaxを使用してJavascriptからPHPに配列を送信
- 14. AJAXを介して配列を送信できません
- 15. Swift - POST要求パラメータとして配列をPHPに送信
- 16. Ajax送信日データ
- 17. コールバックを追跡してデータを単一の配列として送信する
- 18. anglejsを使用してデータの配列を送信するポストメソッド
- 19. char配列の2つの最初の要素をチェックし、整数に送信
- 20. ajaxを使用して文字列の配列をWebAPIに送信
- 21. AJAXの返信データが既存の要素にフェードします
- 22. Handle要素の配列を送信するJSONを返します。
- 23. ajaxデータにストアドプロシージャを送信
- 24. ajaxでデータを送信
- 25. ASP.NET MVCとAjaxでデータを送信
- 26. AJAXコールでDIV要素のIDを送信する
- 27. PHPが配列データをサーバーに送信
- 28. jsonデータを配列(movieclip)as3.0に送信
- 29. AJAXをポーリングしてJavaScriptとサーバー間でデータを送信する
- 30. 配列要素の配列要素をJavaで配列する
である、あなたはループ – IROEGBU
@IROEGBUはありませんで、あなたのAJAXを入れている彼がいません。ループは単にクリックハンドラをバインドしているだけです。 – Barmar
番号は常に設計エラーの兆候です。これらすべての要素にCSSクラスを与えるほうがずっと簡単です。だからあなたはもうforループを必要としません。 –