Хорошо, вот мой код, он хранится во внешнем файле js и правильно включен в основной html в разделе заголовка.
$(document).ready(function(){
var checkForConfirmation = function(){
for(var i=0; i<myOrders.length; i++){
$.ajax({
type: "GET",
url: "orderStatus.php",
data: {action: 'get', id: myOrders[i]},
success: function(data){
if (data){
var reply = jQuery.parseJSON(data);
$("#fancyAlertLink").fancybox().trigger('click');
myOrders.splice(myOrders[i], 1);
}
}
});
if (myorders.length == 0){
clearInterval(waitForRestourantInterval);
}
}
}
if (myOrders.length > 0){
var waitForRestourantInterval = setInterval(function(){checkForConfirmation()}, 5000);
}
});
Как видите, я пытаюсь отобразить fancybox, когда внутренний скрипт ("orderStatus.php") получает правильные данные.
Все работает нормально, если я не использую jQuery (пример: window.alert вместо fancybox), но когда я пытаюсь использовать jQuery внутри этой функции, я получаю странную ошибку.
Firebug говорит, что в строке $("#fancyAlertLink").fancybox().trigger('click');
есть ошибка
Описания ошибки нет, просто "$("
Что я делаю не так???
Извини. Я знаю, что это не ответ, но я не могу все это комментировать. Вот "обновленный" код. Ошибка исчезла, но fancybox по-прежнему не запускается из моего скрипта.
EDIT: триггер не работает внутри функции успеха. Я попытался переместить его наружу, и он работает. Проблема в том, что мне действительно нужно это внутри успеха. Я попытался переместить вызов триггера в отдельную функцию и вызвать функцию из успеха, но тот же результат. Не работает! Какие-либо предложения?
подтверждениеDaemon.js
$(document).ready(function(){
var checkForConfirmation = function(){
for(var i=0; i<myOrders.length; i++){
$.ajax({
type: "GET",
url: "orderStatus.php",
data: {action: "get", id: myOrders[i]},
context: i,
success: function(data){
if(data!="null"){
var reply = jQuery.parseJSON(data);
$("#fancyAlertLink").trigger("click");
myOrders.splice(this, 1);
}
}
});
if (myOrders.length == 0){
clearInterval(waitForRestourantInterval);
}
}
}
if (myOrders.length>0){
var waitForRestourantInterval = setInterval(function(){checkForConfirmation()}, 5000);
}
});
основной html-файл: (smarty+html, теги smarty {literal} игнорируются в этом посте)
<html>
<head>
<script src="jquery-1.4.4.min.js" type="text/javascript"></script>
<script src="fancyBox/jquery.fancybox-1.3.4.pack.js" type="text/javascript"></script>
<link rel="stylesheet" href="fancybox/jquery.fancybox-1.3.4.css" type="text/css" media="screen" />
<script type="text/javascript">
var myOrders = new Array();
{foreach from=$smarty.session.my_orders item=id}
myOrders.push({$id}):
{/foreach}
</script>
<script type="text/javascript">
$(document).ready(function{
$("#fancyAlertLink").fancybox();
});
</script>
<script src="confirmationDaemon.js" type="text/javascript"></script>
</head>
<body>
--- some content here ---
<a id="fancyAlertLink" href="#fancyAlert">Show fancy</a>
<div style="display:none">
<div id="fancyAlert">Fancybox hell yeah!!!</div>
</div>
</body>
</html>
Установка интервалов и AJAX работают должным образом. Fancybox отображается, когда я нажимаю ссылку «Показать фантазии». Но он не запускается из внешнего js. Я отладил это. Он должен работать, он выполняет эту строку, но ничего не появляется