2015-02-19 2 views
6

Я пытался получить данные JSON из моих PHP file.Its давая мне жесткий time.This мой кодПолучить данные в формате JSON POST в CodeIgniter

код на мой взгляд:

var productDetails = {'id':ISBNNumber,'qty':finalqty,'price':finalprice,'name':bookTitle}; 

     var base_url = '<?php echo site_url() ?>'; 
     $.ajax({ 
      url: "<?php echo base_url() ?>index.php/user/Add_to_cart/addProductsToCart", 
      type: 'POST', 
      data:productDetails, 
      dataType:'JSON', 
     }); 

Попытка для получения в моем контроллере:

echo $this->input->post("productDetails"); 

Выходы ничего.

Вот мои заголовки:

Remote Address:[::1]:80 
Request URL:http://localhost/CI/index.php/user/Add_to_cart/addProductsToCart 
Request Method:POST 
Status Code:200 OK 
Request Headersview source 
Accept:application/json, text/javascript, */*; q=0.01 
Accept-Encoding:gzip, deflate 
Accept-Language:en-US,en;q=0.8,fr;q=0.6 
Connection:keep-alive 
Content-Length:52 
Content-Type:application/x-www-form-urlencoded; charset=UTF-8 
Cookie:ci_session=3E5SPro57IrJJkjs2feMNlmMrTqEXrTNN8UyEfleeothNnHwNxuCZDSx4a7cJZGjj7fyr2KLpj%2BPNJeGRSzSPVmcFHVEdhSk4D47ziOl4eZcTUAZlQrWa3EYIeQJVWxMpiGZS26MEfbSXNmfel9e8TcsJTreZHipvfisrJovbXEAW4Uv%2BwrJRep1KCi1MMaDCVJb9UEinRVcDtYe%2F86jhn7kOj4kraVmVzx%2FsOaO0rAxLyAUtez%2Feaa4zBwpN3Td153sAoIb3WxVHoEj2oKyH5prVHigbIhIBR6XZqjBkM6hjBuoD2OSZ2wgLbp9DEENMoqui4WYyHROBuS2DYiJajblcS0KiFga5k%2FQOODvE7p6n%2BozN5ciDliVjJ4PnJ5PD1GaPEmec5%2FbQSlOHYWZk%2F2Blzw3Nw0EtLL7wKDzzQY%3Df645c36bb3548eb8de915b73f8763d97a47783ce 
Host:localhost 
Origin:http://localhost 
Referer:http://localhost/CI/index.php/user/view_available_books/viewAvailableBooks/5 
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.111 Safari/537.36 
X-Requested-With:XMLHttpRequest 
**Form Dataview** sourceview URL encoded 
id:234 
qty:1 
price:0.00 
name:[email protected][email protected]@ 

Мой ответ, который я могу посмотреть в инструментах разработчика:

Array 
(
    [id] => 234 
    [qty] => 1 
    [price] => 0.00 
    [name] => [email protected][email protected]@ 
) 

Но в браузере, выход ничего. Я пытаюсь решить его уже более 4 часов, но напрасно.

print_r($_POST); // outputs nothing 
echo $data = file_get_contents('php://input'); //outputs nothing 
echo $id = $this->input->post('productDetails');// outputs nothing 

Мой Просмотр Код:

<script> 
    $('#addtoCart').on('click',function(event){ 
     event.preventDefault(); 
     $(this).attr('disabled',"disabled"); 
     finalprice = $.trim($('#price').val()); 
     finalqty = $.trim($('#quantity').val()); 

     var productDetails = JSON.stringify({'id':ISBNNumber,'qty':finalqty,'price':finalprice,'name':bookTitle}); 

     var base_url = '<?php echo site_url() ?>'; 
     // console.log($); 
     $.ajax({ 
      url: "<?php echo base_url() ?>index.php/user/Add_to_cart/addProductsToCart", 
      type: 'POST', 
      contentType: "application/json; charset=utf-8", 
      data:productDetails, 
      dataType:'html', 
     }); 


    }); 
</script> 

Controller Код:

function addProductsToCart(){ 
     var_dump(json_decode(file_get_contents("php://input"))); 
     print_r($_POST); 
     // $data = json_decode($_POST["productDetails"]); 
     // var_dump($data); 
     // echo $data = file_get_contents('php://input'); 
// print_r(json_decode($data)); 
     // $id = $this->input->post('id'); 
     // $qty = $this 

    } 
+0

две вещи, которые вы сделали неправильно 1. данные: {: Детали изделия}, Детали изделия 2. $ data = json_decode ($ _ POST ["productDetails"]); –

+0

Не работает – Abhinav

+0

Вы можете показать свой код, что хотите, после получения данных в переменной $ data. вторая вещь, которую вам нужно вернуть или эхо-выход, чтобы вы возвращали данные из контроллера и обрабатывали его с помощью jquery. –

ответ

-1

общий метод я использую для моих Ajax звонки в CI:

JS:

post_array = 
{ 
    "myvar" : "value1", 
    "myvar2": "value2" 
} 

$.post(baseUrl + "/AjaxController/my_function", post_array, 
    function(data) 
    { 
     var res = jQuery.parseJSON(data); 
     alert(res.property); 
    } 

Контроллер:

public function my_function() 
{ 
    $myvar = $this->input->post('myvar'); 
    $myvar2 = $this->input->post('myvar2'); 

    //Stuff 

    echo json_encode($myobject); 
} 
+0

Как эхо или помещать эти данные в таблицу файла вида? Как мне это сделать @AdrienXL? Каким будет мой успех в javascript: функция будет выглядеть? – Eli

+0

Откуда: $ myobject? –

+0

@ логический блок - это объект, который вы создали в зависимости от того, что вы должны делать в части '// Stuff' – AdrienXL

2

У вас есть только свой собственный ответ.

print_r($_POST);

Возврат:

Array 
(
    [id] => 234 
    [qty] => 1 
    [price] => 0.00 
    [name] => [email protected][email protected]@ 
) 

Тогда как вы получите: echo $id = $this->input->post('productDetails');

вы получите идентификатор по echo $id = $this->input->post('id');

+0

Этот массив результатов отображается только в инструментах разработчика, когда я нажимаю на вкладку результатов, но не на этой странице – Abhinav

+0

print_r ($ _ POST); вы должны написать в правильном коде php? –

+0

, так что если $ _POST имеет значение, то $ this-> input-> post() также будет иметь то же значение –

6

У меня была точно такая же проблема. CodeIgniter не знает, как получить JSON. Сначала я думал о кодировании. Потому что я использую fetch.js, а не jQuery. Что бы я ни делал, я делал заметку. $_POST был пуст, а также $this->input->post(). Вот как я решил проблему.

Отправить запрос (как объект пропеллер - потому что ваши JS Lib может различаться):

method: 'POST', 
headers: { 
    'Accept': 'application/json', 
    'Content-Type': 'application/json' 
}, 
body: JSON.stringify({ 
    ready: 'ready' 
}) 

Node: закодировать мои данные типа object в json.jQuery делает это сам, когда вы устанавливаете опцию dataType: 'JSON'.

CodeIgniter (3,1 в моем случае):

$stream_clean = $this->security->xss_clean($this->input->raw_input_stream); 
$request = json_decode($stream_clean); 
$ready = $request->ready; 

Примечание: Вы должны очистить свой $this->input->raw_input_stream. Вы не используете $this->input->post(), что означает, что это не делается автоматически с помощью CodeIgniter.

Что касается ответа:

$response = json_encode($request); 
header('Content-Type: application/json'); 
echo $response; 

В качестве альтернативы вы можете сделать:

echo $stream_clean; 

Примечание: Не требуется, чтобы установить header('Content-Type: application/json'), но я думаю, что это хорошая практика для этого. request уже установил заголовок 'Accept': 'application/json'.

Итак, здесь нужно использовать $this->input->raw_input_stream и декодировать ваши данные самостоятельно.

0

Хотя OP кажется удовлетворительным, выбранный ответ не говорит нам о причине и реальном решении. (Кстати, post_array не является массивом, это действительно объект). Ответ @ jimasun имеет правильный подход. Я просто проясню ситуацию и добавлю решение за пределы CI.

Таким образом, причина проблемы;

Не CI или PHP, но сервер не знает, как обрабатывать запрос, который имеет приложение/JSon типа содержимого. Таким образом, у вас не будет данных $ _POST. Php не имеет к этому никакого отношения. Подробнее читайте по адресу: Reading JSON POST using PHP

И это решение; Либо не отправляйте запрос в качестве приложения/json или тела запроса процесса, чтобы получать данные о сообщениях.

Для ответа CI @ jimasun это точный способ.

И вы также можете получить тело запроса с использованием чистого PHP.

$json_request_body = file_get_contents('php://input'); 
0

У меня была такая же проблема, но я нашел решение.

Это Json, что я посылаю [{"name":"JOSE ANGEL", "lastname":"Ramirez"}]

$data = json_decode(file_get_contents('php://input'), true); 
echo json_encode($data); 

Этот код был проверен и результат [{"name":"JOSE ANGEL","lastname":"Ramirez"}]

+3

Пожалуйста, переведите свой ответ на английский язык. Добро пожаловать в сообщество SO. – Nilesh

+0

SO специально для английского Q/A. Сеть StackExchange * имеет * другие сайты для испанского и других языков. В будущем вы можете попробовать опубликовать на своем родном сайте на своем языке или перевести его с помощью кнопки «edit». Как и ваш вопрос поставлен в очередь для удаления. – SherylHohman

+0

Извините, он уже отредактирован –

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