простой сценарий AJAX на основе iframe: первый вызов дает нулевой элемент, идеальная работа последующего вызова.Что я здесь не понимаю? - PullRequest
1 голос
/ 21 июня 2011

Очень простой AJAX-скрипт, который выполняет следующие действия:

  1. вставляет скрытый iframe для буферизации вывода на стороне сервера
  2. iframe загружает мой PHP-контент без вывода сообщений в div
  3. Выходные данные PHP копируются из div серверной части в div родительской страницы.

Проблема заключается в том, что первый вызов бросает: 'Uncaught TypeError: Невозможно установить свойство' src 'из null'.Все последующие звонки работают отлично.Это сводит меня с ума.Мне нравится простота этой функции, но я явно что-то упускаю.

Javascript, вызываемый здесь:

<html>
<head>
    <!-- ajax -->
    <script src='ajax.js' type='text/javascript'></script>
</head> 
    <body>
        <a href='#' onClick="ajax_request('php.php','show_result');return false;">get ajax data</a>
        <div id='show_result'></div>
    <body>

</html>

файл 'ajax.js':

function ajax_request(url,result_id)
{
    var ajax_iframe_id = 'ajax_iframe_loader';
    var ajax_iframe = document.getElementById(ajax_iframe_id);

    // create hidden iframe transfer buffer if it's not created already.
    if (ajax_iframe == null)
    {

        var element = document.createElement("iframe");
        element.setAttribute('src',url);
        element.setAttribute('id',ajax_iframe_id);
        document.body.appendChild(element);

        element.style.display='none';
        element.style.width='1';
        element.style.height='1';
        element.style.border='0';

        ajax_iframe = element;
    }

    // load server side page into iframe buffer
    ajax_iframe.src = url;

    // get the outputted result from inside our transfer div
    var iframe_inner_doc = ajax_iframe.contentDocument || ajax_iframe.contentWindow.document;
    var content_to_transfer = iframe_inner_doc.getElementById('to_transfer').innerHTML;

    // paste result
    document.getElementById(result_id).innerHTML = content_to_transfer;

}

серверный скрипт 'php.php', который выводит результат для передачи через AJAX (случайное число)

<html>
<body>
<div id='to_transfer'><?=mt_rand(5, 15);?></div>
</body>
</html>

1 Ответ

0 голосов
/ 21 июня 2011

вам нужно добавить это в ваше заявление if

ajax_iframe = element;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...