2017-08-16 13 views
0

このコードを実行すると、$。each(...)。doneという関数が実行されないというコンソールエラーが表示されます。レコードをデータベースに挿入するためにポストしているPHPコードは、データベース内のファイル名がわかるように動作しています。私はエラーを止めるために私のループを修正する必要がありますが、ここで何が間違っているのかは分かりません。ajaxコールで.eachを使用する方法

$("#edit_pic").on("click", function (e) { 
     e.preventDefault(); 
     var files = $('input[name="file"]').val() 
     var data = JSON.parse(files) 
    } 

    $.each(data, function (index, item) { 

     $.ajax({ 
      url: 'functions/add-support-images.php', 
      type: 'POST', 
      dataType: 'json', 
      data: { 
       data: item.file_name 
      }, 
      beforeSend: function() { 
       $("#edit_pic").prop("disabled", true).html("Uploading..."); 
      }, 
     }); 
    }) 

    .done(function (data) { 
     if (!data.success) { 
      console.log(data.message); 


     } else { 

      console.log(data.message); 

     } 

    }) 

PHP:

$response = array(); 
      $id = filter_var($_POST['id'], FILTER_SANITIZE_NUMBER_INT); 
      $stmt = $link->prepare("INSERT INTO `product_images` (`pic_name`,`product_id`) VALUES (?, ?)"); 
      $stmt->bind_param("si", $_POST['data'], $id); 
      $stmt->execute(); 
      $stmt->close(); 


     $response['success'] = true; 
     $response['message'] = "success"; 
+0

'each'にはdoneメソッドはありませんが、ajax関数はありません。 jqueryのドキュメントをご覧ください。 – scrappedcola

答えて

1

$.ajax後に.doneを移動してみてください:

$("#edit_pic").on("click", function (e) { 
    e.preventDefault(); 
    var files = $('input[name="file"]').val() 
    var data = JSON.parse(files) 
} 

$.each(data, function (index, item) { 

    $.ajax({ 
     url: 'functions/add-support-images.php', 
     type: 'POST', 
     dataType: 'json', 
     data: { 
      data: item.file_name 
     }, 
     beforeSend: function() { 
      $("#edit_pic").prop("disabled", true).html("Uploading..."); 
     }, 
    }).done(function (data) { 
     if (!data.success) { 
      console.log(data.message); 


     } else { 

      console.log(data.message); 

     } 

    }); 
}); 

編集

あなたが見るであろう上記のコードで、コメントで述べたように成功のメス個別に送信されるので、各アイテムのセージ。

let items = []; 

$.each(data, function (index, item) { 
    items.push({data: item.file_name}); 
}); 

$.ajax({ 
    url: 'functions/add-support-images.php', 
    type: 'POST', 
    dataType: 'json', 
    data: items, 
    beforeSend: function() { 
     $("#edit_pic").prop("disabled", true).html("Uploading..."); 
    }, 
}).done(function (data) { 
    if (!data.success) { 
     console.log(data.message); 
    } else { 
     console.log(data.message); 
    } 
}); 

注:これはおそらく挿入する項目の配列を受け入れるようにPHPコードの更新が必要となるのではなく、 AJAX呼び出しに送信されたすべてのアイテムを持っているために、あなたはこのような何かを行うことができます単一項目。

+0

ありがとうございます。エラーは表示されなくなりました。しかし、私の成功メッセージはレコードが挿入されたのと同じ回数表示されています。 – user8463989

+0

はい、それは各レコードのajax呼び出しを行うためです。代わりに、更新する値の配列を受け入れるようにPHPコードを更新することもできます。次に '$ .each'を使って各' item.file_name'の値を配列に入れることができます。次に、 '$。each'のajax呼び出しを* outside *にします。 –

+0

あなたは少し私を失ってしまった。私は私の元の質問にPHPを追加しました。 – user8463989

関連する問題