массивы в $.ajax jquery и затем отправляет его на страницу php

#php #jquery #ajax #post

#php #jquery #ajax #Публикация

Вопрос:

 jQuery(document).ready(function(){
    // Set the data text  
    var dataText = "
    { 
        name: 'John',
        time: '2pm' 
     }";  

    alert(dataText);
    // Create the AJAX request  
    $.ajax({  
        type: "POST",                    // Using the POST method  
        url: "/ajax/analytics/push",      // The file to call  
        data: dataText,                  // Our data to pass  
        success: function() {            // What to do on success  
             alert("Data Loaded: "   dataText);
        }  
    });  
});  
</script>   
  

привет, я все еще изучаю ajax. как мы можем отправить массив из $ _POST?

1.im пытаюсь сделать что-то вроде

 var dataText['name'] = 'Jhon';
var dataText['time] = '2pm';
  

затем каким-то образом превращает его в

 $_POST['name'] = 'Jhon';
$_POST['time'] = '2pm';
  

затем отправьте его по URL..

2.is есть способ это отладить ? что я сейчас делаю, так это пишу

         # somehow doesnt work becouse its not auto refresh when the ajax sends a post
    var_dump($_POST);

        # ok heres how i debug it right now.
    ob_start();
    // write content
    $content = $_POST;
    ob_end_clean();
    file_put_contents('CACHE',$content);
  

в файле, я надеюсь, есть лучшее решение для этого..

Спасибо, что заглянули. Адам Рамадан

Ответ №1:

Я не совсем уверен, что вы делаете. Похоже, вы создаете JSON вручную (и делаете это неправильно), а затем передаете это (в форме строки, сериализованной в формате JSON) в свой файл. Затем вы, похоже, ожидаете, что он будет проанализирован PHP автоматически.

Было бы лучше отправить его в виде пар ключ-значение. Вы можете позволить jQuery сделать это за вас, если вы передаете объект. Это не будет сильно отличаться от вашего существующего кода:

 var dataText = 
{ 
    name: 'John',
    time: '2pm' 
};  
  

Обратите внимание, что я удалил двойные кавычки. Это в первую очередь потому, что незаконно иметь строку JS, охватывающую более одной строки, без экранирования разрывов строк. Это также потому, что вы хотите, чтобы объект передавался в ваш $.ajax вызов.

Они должны быть доступны как $_POST['name'] и $_POST['time'] сейчас.

Комментарии:

1. он возвращает объект. а, понятно. итак, jquery может это сделать, передавая массивы в posts. мне было интересно об этом. как насчет его отладки? я имею в виду, как вы можете увидеть, что получено на странице php?

2. @Adam Это не возвращает объект — оно принимает объект в качестве параметра. Вы должны быть в состоянии отладить его с помощью чего-то вроде file_put_contents('CACHE', var_export($_POST, true)) . Обратите внимание, что вам придется отключить буферизацию вывода, чтобы это сработало.

3. работает!. в любом случае возвращаемым является массив array ( ‘name’ => ‘John’, ‘time’ => ‘2pm’, ) . спасибо!

Ответ №2:

 file_put_contents('CACHE',serialize($content));
  

или

 foreach($_POST as $k => $v) $content .= $k .'='.$v;
  

Ответ №3:

 
jQuery(document).ready(function(){
    // Set the data text  
    var dataText = 
    { 
        name: 'John',
        time: '2pm' 
     };  

    alert(dataText);
    // Create the AJAX request  
    $.ajax({  
        type: "POST",                    // Using the POST method  
        url: "/ajax/analytics/push",      // The file to call  
        data: dataText,                  // Our data to pass  
        success: function() {            // What to do on success  
             alert("Data Loaded: "   dataText);
        }  
    });  
});  
 
  
 

        # ok heres how i debug it right now.
    ob_start();

     # somehow doesnt work becouse its not auto refresh when the ajax sends a post
    var_dump($_POST);
    $content = ob_get_contents();
    ob_end_clean();
    file_put_contents('CACHE',$content);