2012-02-23 13 views
1

JQueryUIを使用してソート可能なリストがあり、JQueryの各関数を使用してAJAXリクエストを使って基本PHPファイルに保存します。リクエストはうまくいくようです(Firebugコンソール)が、PHPファイルによってすべてが保存されているわけではなく、一貫性がないように見えるすべてのものが悪化しています。いくつかのIDは失敗する可能性が高いですが、リストに!それは本当に奇妙な、任意のアイデアですか?複数のAJAXリクエストでデータベースの更新が一貫しない

私はGET/POST、sync/asyncを試してみましたが、違いはありませんでした。

Javascriptを

function SaveChanges() { 
     priority = 0; 
     $("#p_menu li").each(function() { 
      if($(this).attr("class") != "range") { 
       $.ajax({"url": "lib/product-menu-save.php", "data": "pm_id="+this.id+"&priority="+priority, "type": "GET"}); 
       priority++; 
      } 
     }); 
    } 

PHPファイル

<?php 

require_once '../includes/adminsession.php'; 
require_once '../lib/mysql.php'; 

$pm_id = $_GET['pm_id']; 
$pm_priority = str_pad($_GET['priority'], 4, '0', STR_PAD_LEFT); 

$save_stmt = $db->prepare("UPDATE products SET priority = ? WHERE id = ?"); 
$save_stmt->bind_param('si', $pm_priority, $pm_id); 
if(!$save_stmt->execute()) echo $save_stmt->error; else echo 'SUCCESS'; 

データは、AJAXリクエストに入る正常に見えると成功はすべてのリクエストに対して返されます。関連性がある場合、約60項目あります。

+1

60件のAJAXリクエストではなく、リストを作成して1回のリクエストで提出するのはなぜですか? –

+0

JSON文字列として?それが60件のリクエストとして機能しない理由は何ですか?それとも単なる推薦ですか?パフォーマンスは問題ではありませんが、メソッドを変更するだけで動作させることができます。私はこれを困惑しましたか? – MattP

+0

JSON、2つのカンマ区切りのパラメータ(IDの場合は1つ、優先順位の場合は1つ*)は、クライアントとサーバー間の通信を最小限に抑えることができると思います。 –

答えて

0

1つのAJAXリクエストを最小限に抑えるために、リストとしてIDを送信できます。
あなたが一緒にすべてのIDを送信されますので、あなたが優先順位を送信する必要はありません..あなたは、そのサーバー側を扱うことができる)

function SaveChanges() { 
    var id_list = []; 
    $("#p_menu li").each(function() { 
     if($(this).attr("class") != "range") { 
      id_list.push(this.id); 
     } 
    }); 
    $.ajax({ 
      url : 'lib/product-menu-save.php', 
      data : {ids: id_list}, 
      type : 'POST' 
      }); 
} 

と(このような何か、私は熟練していないよとPHPの

$save_stmt = $db->prepare("UPDATE products SET priority = ? WHERE id = ?"); 

$pm_priority_value = 0; 

foreach ($_POST['ids'] as $pm_id) { 

    $pm_priority = str_pad($pm_priority_value, 4, '0', STR_PAD_LEFT); 

    $save_stmt->bind_param('si', $pm_priority, $pm_id); 
    if(!$save_stmt->execute()) echo $save_stmt->error; else echo 'SUCCESS'; 

    $pm_priority_value++; 
} 
関連する問題