Как просмотреть данные, переданные Ajax в PHP, и что PHP делает с опцией Data - Dropdown Menu - PullRequest
0 голосов
/ 19 февраля 2019

Я хочу обновить свою базу данных, не обновляя страницу при выборе параметра в раскрывающемся меню.Поэтому я буду использовать Ajax.Проблема в том, что, не обновляя страницу и не увидев работающий код PHP, я не могу увидеть, есть ли какие-либо ошибки в моем коде для их исправления.Есть ли способ просмотреть данные, которые я передаю при выборе параметра из раскрывающегося списка в файл PHP, и увидеть ошибки, которые файл PHP сообщает при обработке этих данных?

Я попытался проверить консольмоего браузера, но он ничего не отображает.

Мой выпадающий список:

echo "<select id='vacationId' name='vacationId' style='background:lightblue'>
    <option selected='selected' value='' style='background:lightblue'></option>
    <option value='" . $vacationIdP . "' style='background:lightblue'>P</option>
    <option value='" . $vacationIdO . "' style='background:lightblue'>O</option>
    <option value='" . $vacationIdA . "' style='background:lightblue'>A</option>
    <option value='" . $vacationIdR . "' style='background:lightblue'>R</option>
</select>";

Ajax-код для передачи параметра Значение в файл PHP:

$('#vacationId').change(function(){
    var option = $('#vacationId').val();
    console.log(option);

    $.ajax({
        type: 'GET',
        url: 'saveVV.php',
        data:
             {
             option:option   // Does this pass the value of the option ?
// Can I access this in my PHP file with $vacationId = $_GET['option'];
             }
    }).done(function(resp){
         if(resp == 200) {
             console.log('Success!');
         }else if(resp == 0){
             console.log('Failed..');
         }
    });
});

Я хочу передать значение выбранного параметра в мой файл PHP, а затем выполнить некоторую обработку в PHP.И я хочу видеть, что я передаю правильную информацию в мой файл PHP.И я хотел бы, чтобы код PHP работал с этой информацией и, возможно, отображал некоторые ошибки.

Ответы [ 2 ]

0 голосов
/ 19 февраля 2019

Вам необходимо добавить параметр dataType, а параметр data в вызове ajax - это объект JavaScript с ключом и значением.Таким образом, ключ должен быть в одинарных / двойных кавычках, указанных в коде ниже:

$.ajax({
    type: 'GET',
    url: 'saveVV.php',
    dataType: 'json',
    data: { 'option':option } // In php you can access like $_GET['option']
}).done(function(resp){
     if(resp == 200) {
         console.log('Success!');
     }else if(resp == 0){
         console.log('Failed..');
     }
});
0 голосов
/ 19 февраля 2019

Вы можете использовать эту оболочку, которую я написал

https://github.com/ArtisticPhoenix/MISC/blob/master/AjaxWrapper/AjaxWrapper.php

class AjaxWrapper{

    /**
     * Development mode
     *
     * This is the least secure mode, but the one that
     * diplays the most information.
     *
     * @var string
     */
    const ENV_DEVELOPMENT = 'development';

    /**
     *
     * @var string
     */
    const ENV_PRODUCTION = 'production';

    /**
     * 
     * @var string
     */
    protected static $environment;

    /**
     * 
     * @param string $env
     */
    public static function setEnviroment($env){
        if(!defined(__CLASS__.'::ENV_'.strtoupper($env))){
            throw new Exception('Unknown enviroment please use one of the '.__CLASS__.'::ENV_* constants instead.');
        }
        static::$environment = $env;
    }

    /**
     * 
     * @param closure $callback - a callback with your code in it
     * @param number $options - json_encode arg 2
     * @param number $depth - json_encode arg 3
     * @throws Exception
     * 
     * @example
     * 
     * 
     */
    public static function respond(Closure $callback, $options=0, $depth=32){
        $response = ['userdata' => [
              'debug' => false,
              'error' => false
        ]];
        ob_start();
         try{
             if(!is_callable($callback)){
                //I have better exception in mine, this is just more portable
                throw new Exception('Callback is not callable');
             }
             $callback($response);
         }catch(\Exception $e){
              //example 'Exception[code:401]'
             $response['error'] = get_class($e).'[code:'.$e->getCode().']';
            if(static::$environment == ENV_DEVELOPMENT){
            //prevents leaking data in production
                $response['error'] .= ' '.$e->getMessage();
                $response['error'] .= PHP_EOL.$e->getTraceAsString();
            }
         }
         $debug = '';
         for($i=0; $i < ob_get_level(); $i++){
             //clear any nested output buffers
             $debug .= ob_get_clean();
         }
         if(static::environment == static::ENV_DEVELOPMENT){
             //prevents leaking data in production
              $response['debug'] = $debug;
         }
         header('Content-Type: application/json');
         echo static::jsonEncode($response, $options, $depth);
   }
   /**
    * common Json wrapper to catch json encode errors
    * 
    * @param array $response
    * @param number $options
    * @param number $depth
    * @return string
    */
   public static function jsonEncode(array $response, $options=0, $depth=32){
       $json = json_encode($response, $options, $depth);
       if(JSON_ERROR_NONE !== json_last_error()){
           //debug is not passed in this case, because you cannot be sure that, that was not what caused the error.
           //Such as non-valid UTF-8 in the debug string, depth limit, etc...
           $json = json_encode(['userdata' => [
              'debug' => false,
              'error' => json_last_error_msg()
           ]],$options);
       }
       return $json;
   }
}

Например

AjaxWrapper::setEnviroment(AjaxWrapper::ENV_DEVELOPMENT);

AjaxWrapper::respond(function(&$result){
      echo "foo";
     //..other code
     $response['success'] = true;
});

Тогда, когда вы сделаете console.log, она будет иметь всебыл выведен в обратном вызове как data.debug и т. д.

Надеюсь, это поможет.

Используется комбинация ob_* буферизации вывода и перехвата исключений try/catch для перехвата любого вывода и переносаэто в элементе data.debug или data.error, если среда настроена правильно.

Тогда, когда вы сделаете ajax stuff ... function(data) { console.log(data); }, оно будет включено.

   data.debug = "foo" 

И так далее.

...