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);
行,它运作良好,为什么?是什么导致了这个问题?
答案 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);
});
});
});
};