2015-05-10 1 views
-2

Я только что начал кодирование в PHP. Я ранее работал в asp.net. В do net webmethod вы аккуратно возвращаете данные на вызов AJAX. Пытаясь на PHP, я обнаружил, что вы в лучшем случае можете просто echo данных, которые хотите вернуть.Возвращаемые данные через echo из AJAX в PHP

Если я преобразую данные в JSON на сервер, а затем вернусь, то он не уверен, что PHP не будет кодировать сообщения об ошибках в него. Это создает недопустимый JSON в коде на стороне клиента, и результаты не могут быть проанализированы.

Так что я хочу знать, есть ли что-то продвинутое, которое я могу сделать, чтобы всегда аккуратно и красиво возвращаться с сервера, даже когда возникает ошибка?

Уточнение: сначала при возникновении ошибки декодирование на клиенте от JSON невозможно. На самом деле это вопрос.

+0

Что не так с моим вопросом ?? – whatever

+0

Что именно вы хотите достичь, и как вы это делали в asp.net? Пожалуйста, добавьте эту информацию в вопрос, это сделает ее более читаемой, и это увеличит ваши шансы получить ответ. – Cristik

+0

@Cristik - это непонятно. Я хочу вернуть данные json .. и когда ошибка возникает в php, тогда у вас проблемы, потому что ошибка мешает endcoding json. Я думаю, что мой вопрос довольно ясен ... – whatever

ответ

1

Похоже на основе этой проблемы является необработанное исключение на сервере, который опрокинет ваш JSON-вывод с недопустимыми строками (или, если отчет об ошибках отключен, как и должно быть, выход JSON будет незавершенным и, следовательно, все еще недействителен).

Рассмотрим AJAX код:

function getPost() 
{ 
    return riskyOperation(); // throws \PDOException 
} 

echo json_encode(getPost()); 

Это, очевидно, будет вызывать проблемы в случае возникновения ошибки базы данных. Чтобы исправить это, вы могли бы сделать что-то вроде этого:

function getPost() 
{ 
    try 
    { 
     $post = riskyOperation(); // throws \PDOException 
    } 
    catch (\PDOException $e) 
    { 
     // @todo Log the exception here 
     $post = ['error' => 'A database error occurred', ]; 
    } 

    return $post; 
} 

echo json_encode(getPost()); 

Обратите внимание в этом случае я не отправляю сообщение об ошибке клиента (в $e->getMessage()), так как технические ошибки о базе данных не подходят для пользователей, и могут помочь попыткам взлома.

Кроме того, стоит также защищать оборону - вместо того, чтобы запускать код, который может вызвать ошибку, часто бывает возможно сделать проверки перед запуском этого кода, чтобы можно было избежать ошибки, а не быть пойманной.

+0

Теперь это довольно круто !!!!! и мой вопрос нуждается в поддержке. Поскольку это было недопустимо, чтобы его нивелировали. – whatever

+0

@ ничего, рад, что это поможет. Мы склонны отговаривать нас от просьбы о повышении - вопросы, заслуживающие поддержки, получат их вовремя. Возможно, небольшой пример кода, возможно, помог прояснить то, что вы искали. Я также отредактировал «пожалуйста, внимательно прочитайте вопрос», так как это может привести к еще большему количеству downvotes. Короче говоря, не беспокойтесь о DV и просто используйте их в качестве поощрения, чтобы задать более подробный вопрос в следующий раз. – halfer

+0

Так милый !!!! Большое спасибо!!! Не только stackoverflow, но и весь мир было бы лучше, если бы было еще несколько таких людей, как вы. :) – whatever

0

Да, вы можете эхо-данные в структуре данных json от php. Вот пример

PHP

$data = array('name' => 'David' , 'age' => '25'); 
header('Content-Type: application/json'); 
echo json_encode($data); //Convert array to json string 

Javascript (Client Side)

var data = { 'var' : '123' }; // Some data if you want to send to server 

    $.ajax({ 

    url: "PATH_TO_PHP_FILE", 
    data : data, 
    dataType: "json", 

    success: function(json){ 

    var response=jQuery.parseJSON(json); 

    if(typeof response =='object') { 

    alert(json.name); 
    alert(json.age); 

    } else {   
    echo "Not valid json object"; 
    } 

    } 

    }); 
+0

Теперь предположим, что у вас есть запутаться в ошибке на сервере .. то ??? – whatever

+0

Затем сервер попытается отправить вам сообщение об ошибке и попытаться отправить его клиенту, а декодирование на клиенте будет беспорядочным. – whatever

+0

Данные Json будут автоматически декодироваться в json-объект, если вы добавите тип данных: json , Я обновлю код выше –

Смежные вопросы