Skip to content

Commit 2ab5152

Browse files
author
Joseph Lenton
committed
fixed ajax bugs
* Fixed failing to buffer ajax output under certain calls. * Fixed iFrame being initialized twice, and failing to get content when first initialized.
1 parent d2a9379 commit 2ab5152

File tree

1 file changed

+65
-62
lines changed

1 file changed

+65
-62
lines changed

src/php_error.php

Lines changed: 65 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1495,38 +1495,38 @@ private function flushBuffer() {
14951495
*/
14961496
public function endBuffer() {
14971497
if ( $this->isBufferSetup ) {
1498-
if (
1499-
!$this->isAjax &&
1500-
$this->catchAjaxErrors &&
1501-
(!$this->htmlOnly || !ErrorHandler::isNonPHPRequest())
1502-
) {
1503-
$content = ob_get_contents();
1504-
$handlers = ob_list_handlers();
1498+
$content = ob_get_contents();
1499+
$handlers = ob_list_handlers();
15051500

1506-
$wasGZHandler = false;
1501+
$wasGZHandler = false;
15071502

1508-
$this->bufferOutput = true;
1509-
for ( $i = count($handlers)-1; $i >= 0; $i-- ) {
1510-
$handler = $handlers[$i];
1503+
$this->bufferOutput = true;
1504+
for ( $i = count($handlers)-1; $i >= 0; $i-- ) {
1505+
$handler = $handlers[$i];
15111506

1512-
if ( $handler === 'ob_gzhandler' ) {
1513-
$wasGZHandler = true;
1514-
ob_end_clean();
1515-
} else if ( $handler === 'default output handler' ) {
1516-
ob_end_clean();
1517-
} else {
1518-
ob_end_flush();
1519-
}
1507+
if ( $handler === 'ob_gzhandler' ) {
1508+
$wasGZHandler = true;
1509+
ob_end_clean();
1510+
} else if ( $handler === 'default output handler' ) {
1511+
ob_end_clean();
1512+
} else {
1513+
ob_end_flush();
15201514
}
1515+
}
15211516

1522-
$content = $this->discardBuffer();
1517+
$content = $this->discardBuffer();
15231518

1524-
if ( $wasGZHandler ) {
1525-
ob_start('ob_gzhandler');
1526-
} else {
1527-
ob_start();
1528-
}
1529-
1519+
if ( $wasGZHandler ) {
1520+
ob_start('ob_gzhandler');
1521+
} else {
1522+
ob_start();
1523+
}
1524+
1525+
if (
1526+
!$this->isAjax &&
1527+
$this->catchAjaxErrors &&
1528+
(!$this->htmlOnly || !ErrorHandler::isNonPHPRequest())
1529+
) {
15301530
$js = $this->getContent( 'displayJSInjection' );
15311531
$js = JSMin::minify( $js );
15321532

@@ -1540,9 +1540,9 @@ public function endBuffer() {
15401540
} else {
15411541
echo $js;
15421542
}
1543-
1544-
echo $content;
15451543
}
1544+
1545+
echo $content;
15461546
}
15471547
}
15481548

@@ -2898,48 +2898,51 @@ private function displayJSInjection() {
28982898
* Clear this, make a new (real) XMLHttpRequest,
28992899
* and then re-run everything.
29002900
*/
2901-
iDoc.getElementById('ajax-retry').onclick = function() {
2902-
var methodCalls = self.__.methodCalls;
2903-
2904-
initializeXMLHttpRequest.call( self );
2905-
for ( var i = 0; i < methodCalls.length; i++ ) {
2906-
var method = methodCalls[i];
2907-
self[method.method].apply( self, method.args );
2908-
}
2901+
var retry = iDoc.getElementById('ajax-retry');
2902+
if ( retry ) {
2903+
retry.onclick = function() {
2904+
var methodCalls = self.__.methodCalls;
2905+
2906+
initializeXMLHttpRequest.call( self );
2907+
for ( var i = 0; i < methodCalls.length; i++ ) {
2908+
var method = methodCalls[i];
2909+
self[method.method].apply( self, method.args );
2910+
}
29092911

2910-
closeIFrame();
2912+
closeIFrame();
29112913

2912-
return false;
2913-
};
2914+
return false;
2915+
};
29142916

2915-
/*
2916-
* The close handler.
2917-
*
2918-
* When closed, the response is cleared,
2919-
* and then the request finishes with null info.
2920-
*/
2921-
iDoc.getElementById('ajax-close').onclick = function() {
2922-
copyRequestProperties( self.__.inner, self, true );
2917+
/*
2918+
* The close handler.
2919+
*
2920+
* When closed, the response is cleared,
2921+
* and then the request finishes with null info.
2922+
*/
2923+
iDoc.getElementById('ajax-close').onclick = function() {
2924+
copyRequestProperties( self.__.inner, self, true );
29232925

2924-
// clear the response
2925-
self.response = '';
2926-
self.responseText = '';
2927-
self.responseXML = null;
2926+
// clear the response
2927+
self.response = '';
2928+
self.responseText = '';
2929+
self.responseXML = null;
29282930

2929-
if ( self.onreadystatechange ) {
2930-
self.onreadystatechange( ev );
2931-
}
2931+
if ( self.onreadystatechange ) {
2932+
self.onreadystatechange( ev );
2933+
}
29322934

2933-
closeIFrame();
2934-
return false;
2935-
};
2935+
closeIFrame();
2936+
return false;
2937+
};
29362938

2937-
var html = iDoc.getElementsByTagName('html')[0];
2938-
html.setAttribute( 'class', 'ajax' );
2939+
var html = iDoc.getElementsByTagName('html')[0];
2940+
html.setAttribute( 'class', 'ajax' );
29392941

2940-
setTimeout( function() {
2941-
iframe.style.opacity = 1;
2942-
}, 1 );
2942+
setTimeout( function() {
2943+
iframe.style.opacity = 1;
2944+
}, 1 );
2945+
}
29432946
}
29442947

29452948
/*

0 commit comments

Comments
 (0)