Используйте PrototypeJS и делайте так:
Иметь PHP вроде этого
$jsonHeader = array();
if($_REQUEST['param1'])
{
echo '<p>You passed ' . $_REQUEST['param1'] . '</p>';
$jsonHeader['status'] = 'Success';
}else
{
$jsonHeader['status'] = 'Failed because the request was invalid';
}
if(is_array($jsonHeader) and sizeof($jsonHeader) > 0)
{
header('X-JSON: (' . json_encode($jsonHeader) . ')');
}
Тогда сделайте ваш Ajax-вызов вот так
new Ajax.Request('dostuff.php', {
method: 'get',
parameters: {'param1': 'this is param 1'},
onSuccess: function(response, jsonHeader){
if(jsonHeader['status'] == 'Success'){
//Everything is OK, do stuff
}else{
alert(jsonHeader['status']);
}
},
onFailure: function(){
alert('Fail!');
}
});
Прототип захватывает заголовок X-JSON, возвращаемый PHP, и автоматически устанавливает аргумент jsonHeader функции onSuccess в массив Javascript со значениями, которые были изначально установлены в PHP.
Приведенный выше сценарий хорош, если объем данных, которые вы возвращаете в Javascript, вписывается в заголовок HTTP.
Если вам нужно вернуть много данных, просто сделайте PHP-вывод результата в JSON-кодировке, а не сделайте его частью заголовка. Затем вы можете использовать метод evalJSON () объекта ответа в вашем вызове Ajax.