문제

이 파일이 포함 된 PHP 응용 프로그램이 있습니다 : Landing.php, redirect.php, ajax.php

페이지 호출에 Landing.php, 나는 특정 데이터를 캡처하기 위해 JavaScript 코드를 실행하고 Ajax 게시물을 발행합니다. ajax.php DB에 삽입합니다. 마침내 PHP 헤더() 리디렉션 리디렉션 .php

현재 위의 기능은 출력 버퍼링을 사용하고 있지만 헤더() Ajax 게시물이 완료되지 않도록 너무 빨리 실행됩니다.

나는 사용을 시도했다 잠() usleep () ~ 전에 헤더() 그러나 그들은 작동하지 않습니다. 출력 버퍼링에 익숙하지 않기 때문에 친절한 손을 제공 하시겠습니까?

고맙습니다.

<?php ob_start(); ?>

<scripts type="text/javascript">
var data = 'blah..blah..blah..';
ajaxPost('ajax.php', data);
</scripts>

<?php
sleep(2);    // <---- I want the script to sleep here and wait for the AJAX to finish
header('c.php)
ob_end_flush();
?>
도움이 되었습니까?

해결책

내가 당신을 올바르게 이해한다면, 당신은 웹 응용 프로그램의 작동 방식에 대한 근본적인 오해가 있습니다.

전체 스크립트가 서버에서 먼저 실행되고 Ajax 호출이있는 출력이 브라우저로 전송되기 때문에 PHP 스크립트는 Ajax 비트가 실행될 때까지 기다릴 수 없습니다. 당신은 당신이하는 방식을 다시 생각해야합니다.

예를 들어, JavaScript가 먼저 Ajax 호출을 한 다음 브라우저를 리디렉션 할 수 있습니다.

편집 : 알았어, 이제 나는 이것에 대해 잠시 생각 했으므로, 나는 어떻게 이런 식으로 어떻게 알 수있다. ~할 것 같다 출력 버퍼링을 사용하지 않을 때는 브라우저가 스크립트를 보자 마자 스크립트를 실행하는 경우 (전체 페이지를로드하지 않고) 스크립트를 실행하십시오. 실제로 그런 경우에도 여전히 브라우저의 타이밍, 사용자 인터넷 연결의 품질 등에 의존하고 있습니다. 그것은 결정적으로입니다 ~ 아니다 좋은것.

그러나 작동 할 수있는 유일한 방법은 헤더 호출 전에 Ajax 호출이 브라우저에 출력 된 경우입니다. HTTP 응답에서 콘텐츠 전에 헤더를 보내야하므로 (우선 출력 버퍼링을 사용하는 이유) JavaScript를 출력하지 않거나 헤더 호출이 실패합니다. 따라서 귀하의 접근 방식을 다시 생각하는 것이 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top