PHP可以将json数据发送回调用脚本,然后像flush()那样恢复处理吗?

时间:2011-09-14 22:10:54

标签: php jquery

的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传递给它?

1 个答案:

答案 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这样的路径中传递。