的jQuery
var result='';
jQuery.ajax
({
contentType: "application/json; charset=utf-8",
dataType: "json",
url: <?php echo '"' .plugins_url('/test.php', __FILE__); ?>?Query="+ jQuery('#test').val(),
success: function(data)
{
//process results
},
error: function(jqXHR, textStatus, errorThrown){
console.log(arguments);
alert('HTTP Error: '+errorThrown+' | Error Message: '+textStatus);
return;
}
});
test.php的
$file = $rootPath.'wp-content/uploads/test/'.$query.".txt";
if (file_exists($seoCacheFile) && is_readable($seoCacheFile))
{
$retarr = file_get_contents($file);
if($retarr !=="")
{
print_r($retarr);die;
}
}
if(count($ret)){
$retarr = json_encode(array('response' => array('test' => array('Results'=>$ret))));
print_r($retarr);
flush();
//PROBLEM IS HERE
//If an error occurs here, the json is mangled, flush() does not help. Can I send the json and deal with PHP errors separately?
/* if (!is_dir($rootPath.'wp-content/uploads/test/')){mkdir($rootPath.'wp-content/uploads/test/');}
$seoCacheFile = fopen($rootPath.'wp-content/uploads/test/'.$query.".txt",'w');
fwrite($File, $retarr);fclose($File);
*/
}
或者我是否需要将写操作移出php并创建第二个ajax调用,将json传递给它?
答案 0 :(得分:0)
您需要在脚本顶部显示ini_set('display_errors', 'Off');
进行显示。然后,您应该将所有错误记录在顶部:
ini_set('log_errors','On');
ini_set('error_log','path-to-phperror-log.log');
然后,您需要处理代码中可能出现的错误,如果遇到错误,请发送相应的信息。例如:
json_encode(array('result' => 'error', 'error' => 'File I/O error.'));
另外,请确保$query
正确转义。您不希望有人在../../../wp-login.php
这样的路径中传递。