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);
лайн, это хорошо работает, почему? что из-за этой проблемы?
Я собираюсь угадать, что вам понадобится вторая .post()
которая будет обработана ПОСЛЕ первого .post()
и когда вы включите alert()
, который гарантирует, что он пойдет в этом порядке, но без alert()
, это условие гонки и зависит от того, какой .post()
возвращается быстрее.
Есть несколько способов исправить последовательность. Самый простой способ - запустить второй .post()
из обработчика успеха первого, чтобы вы знали, что первый уже завершен.
Вы также можете использовать обещания jQuery, или вы можете использовать свои собственные флаги, чтобы отслеживать, что закончилось, и вызывать последний бит кода только тогда, когда оба они закончили.
Вот как вы могли бы запустить второй .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);
});
});
});
};
ImageID
будет активирован?