如何使用两个$ .post方法很好地从2个不同的数据库中提供数据

时间:2013-12-21 06:30:53

标签: php jquery

 function ChangeGallery(){
    var GalleryName = $('.SubSubGalleryLock').text();

    /*Send string to Data1.php and include Tags from Database*/
    $.post("Data1.php", {  Sections: GalleryName  },
    function(data){
         $(".IncludeData").append(data);
    }); 

    /*send string to Data2.php and include Events data from Database*/
    $.post("Data2.php",{  GallerySec: GalleryName  },
    function(response){
         /*when i use alert method, this function works very well, why?*/
         alert('SomeString');
     var data = jQuery.parseJSON(response);
         var ImageID  = data[0];
         var ImageSrc = data[1];
     $(ImageID).click(function(){
        $(".LargeImage").attr('src', ImageSrc);
     });
     });
};
Data1.php中的

  /*give data from database1 and print to HTML File*/
  if ($_POST['Sections']) == "String")
  {  $results = mysql_query("SELECT * FROM Table1");
  while($row = mysql_fetch_array($results))
  { echo $row['Tags']; }
Data2.php中的

  /*give data from database2 and Use for events*/
  if ($_POST['GallerySec']) == "String")
  {  $results = mysql_query("SELECT * FROM Table2");
  while($row = mysql_fetch_array($results))
  { echo json_encode($row); }

在客户端,当我使用它时,Data1.php工作得非常好,但Data2.php只有当我写一个

alert('Some stringh');

之后

var data = jQuery.parseJSON(response); 

行,它运作良好,为什么?是什么导致了这个问题?

1 个答案:

答案 0 :(得分:1)

我猜你需要在第一个.post()之后处理第二个.post()以及当你放入alert()时,这可以保证它会进入顺序,但没有alert(),这是一个竞争条件,取决于哪个.post()返回得更快。

有几种方法可以修复排序。最简单的方法是从第一个成功处理程序中启动第二个.post(),以便您知道第一个已经完成。

您也可以使用jQuery promises,或者您可以使用自己的标志来跟踪哪些已经完成,并且只有在两者完成时才调用最后一位代码。

以下是如何从第一个成功处理程序开始第二个.post()以保证订单:

function ChangeGallery(){
    var GalleryName = $('.SubSubGalleryLock').text();

    /*Send string to Data1.php and include Tags from Database*/
    $.post("Data1.php", {  Sections: GalleryName  },
    function(data){
         $(".IncludeData").append(data);
        /*send string to Data2.php and include Events data from Database*/
        $.post("Data2.php",{  GallerySec: GalleryName  },
            function(response){
                var data = jQuery.parseJSON(response);
                var ImageID  = data[0];
                var ImageSrc = data[1];
                $(ImageID).click(function(){
                    $(".LargeImage").attr('src', ImageSrc);
                });
         }); 
     });
};