2013-12-02 2 views
0

Я получил 2 страницыJquery PHP страницы Ajax вызова, которые содержат Ajax звонки

1) index.php

2) feedy.php

1) В index.php я этот код :

$.ajax({  type: 'GET', 

      url: 'feedy.php?n=<?echo $nnn?>', 
      data: { get_param: 'value' }, 
      success: function (data) { 
           var names = data 


       $('#content').html(data);   
      } 
     }); 

2) В feddy.php у меня есть этот код:

for (i=0;i<=10-1;i++){ 

$.ajaxSetup({async: false}); 
$.post( 
      'addme.php', 
      { txt: con, lnk:ln,addr:'".$addr."' }, 
      function(data) { 
       $('#stage').html(data); 

      } 

} 

Как вы можете видеть, у меня есть страница, вызывающая другую страницу, которая делает 10 вызовов другой страницы.

Проблема: index.php вызывает feedy.php, но он только ждет, чтобы получить выход php, а не вывод javascript-кода. Могу ли я заставить его ждать, чтобы в feedy.php все звонки можно было сделать?

Другое решение, я думаю, может работать, это найти способ отправить сигнал index.php, чтобы фид закончил делать звонки.

Пожалуйста, помогите мне обусловленно я не могу найти решение :(

ответ

0

внутри для цикла в feddy.php, которые она возвращает заполненное значение index.php, поэтому он не возвращается до тех пор, петля делается. Или более правильно, так что Javascript не продолжается на index.php, пока цикл не выполняется.

for (i=0;i<=10-1;i++){ 

    $.ajaxSetup({async: false}); 
    $.post( 
      'addme.php', 
      { txt: con, lnk:ln,addr:'".$addr."' }, 
      function(data) { 
       $('#stage').html(data); 

      } 

    if(i = 8) { //right before the i++ for the last execution 
     return 'positive value'; 
    } 
} 

, а затем для индекса, добавьте если заявление к вашему успеху

$.ajax({  type: 'GET', 

     url: 'feedy.php?n=<?echo $nnn?>', 
     data: { get_param: 'value' }, 
     success: function (data) { 
      if(response=='positive value') { 
       var names = data 


       $('#content').html(data);   
      } 
     } 
    }); 
+0

Я сделал это, но я не работал. Я напечатал текстовую строку в конце index.php, но не дождался вызовов ajax ... –

+0

Это ограничение комментариев убивает меня. Я могу только прокомментировать мои собственные ответы. Мне любопытно ответ Дэвида, потому что я использую AJAX с JQuery для выполнения действия только в том случае, если мой вызов AJAX возвращается успешно. – KingRichard

+0

Возможно, вы захотите включить оператор if в цикл for, чтобы определить, завершен ли цикл, а затем вернуть значение в файл index.php. После того, как это будет возвращено, попросите оператор JavaScript if в индексе проверить возвращаемое значение и затем выполнить. – KingRichard

1

AJAX является асинхронным, что означает, что он не останавливает поток выполнения.

Когда вы выполняете вызов AJAX в index.php, он не будет ждать результатов от feedy.php, потому что он выполняет асинхронный вызов.

Вам придется переосмыслить, как feedy.php возвращает данные, убедившись, что он делает это синхронно. Пример этого будет непосредственно отражать данные, которые вам нужны на странице, а не обертывать их при вызове асинхронной функции.

0

Вы можете поместить код JavaScript от feddy.php в функцию в index.php и вызвать эту функцию после вашего первого вызова ajax.

Некоторые функции, как это делает, что все, что вам нужно сделать с feddy.php ...

function doFeddyCalls() 
{ 
    for (i=0;i<=10-1;i++){ 
     $.ajaxSetup({async: false}); 
     $.post(
      'addme.php', 
      { txt: con, lnk:ln, addr:'".$addr."' }, 
      function(data) { 
       $('#stage').html(data); 
     }); 
    } 
} 

И тогда, когда вы сделаете свой АЯКС вызов feddy.php, сделать что-то вроде этого.

$.ajax({ 
    type: 'GET', 
    url: 'feedy.php?n=<?echo $nnn?>', 
    data: { get_param: 'value' }, 
    success: function (data) 
    { 
     var names = data 
     $('#content').html(data); 
     doFeddyCalls(); //Ajax on feddy.php  
    } 
}); 

После того, как вы использовали АЯКС функцию для загрузки feddy.php в index.php JavaScript может действовать на нагруженных элементов.

EDIT: Поскольку вы не хотите, чтобы пользователь видел их загрузку, вы могли бы скрыть элемент, используя $('#content').hide(), или покажите панель загрузки в среднее время.This answer описывает, как сделать один обратный вызов для нескольких вызовов Ajax, которые вы могли бы использовать для отображения элемента после завершения загрузки.

+0

Но время загрузки index.php будет очень большим! Я пытался сделать это в прошлом, но я хочу загрузить его в фоновом режиме ... –

+0

Есть ли причина, по которой вы не можете сделать это в PHP? JavaScript внутри вашего HTML-кода всегда будет работать на стороне клиента, поэтому он не будет запущен до того, как ваш сервер отправит его. – David

+0

feedy.php имеет код в js, который мне нужен. Если бы я мог написать все в php, это было бы здорово, и у меня не возникнет никаких проблем. –

Смежные вопросы