2016-04-12 6 views
2

Я пытаюсь передать объект JSON, который выглядит примерно так:Передача JSON объект PHP скрипт

{"service": "AAS1", "sizeTypes":[{"id":"20HU", "value":"1.0"},{"id":"40FB","2.5"}]} 

Только примечание: В sizeTypes, Есть в общей сложности около 58 элементов в массиве.

Когда пользователь нажимает кнопку отправки, мне нужно отправить объект в скрипт PHP для запуска запроса UPDATE. Вот Javascript, который должен быть отправки JSON в PHP скрипт:

$('#addNewSubmit').click(function() 
{ 
    var payload = { 
    name: $('#addservice').val(); 
    sizeTypes: [] 
    }; 

    $('input.size_types[type=text]').each(function(){ 
    payload.sizeTypes.push({ 
     id: $(this).attr('id'), 
     value: $(this).val() 
     }); 
    }); 

    $.ajax({ 
    type: 'POST', 
    url: 'api/editService.php', 
    data: {service: payload}, 
    dataType: 'json', 
    success: function(msh){ 
     console.log('success'); 
    }, 
    error: function(msg){ 
     console.log('fail'); 
    } 
    }); 
}); 

Используя описанную выше функцию щелчка, я пытаюсь отправить объект к PHP скрипт ниже, который находится в апи/editService.php:

<?php 
if(isset($_POST['service'])) 
{ 
    $json = json_decode($_POST['service'], true); 

    echo $json["service"]["name"] . "<br />"; 

    foreach ($json["service"]["sizeTypes"] as $key => $value){ 
    echo $value["value"] . "<br />"; 
    } 
} 
else 
{ 
    echo "Nooooooob"; 
} 
?> 

у меня нет запроса UPDATE на месте еще потому, что я даже не уверен, если я правильно передавая JSON. В функции javascript click вы видите функции SUCCESS и ERROR. Все, что я создаю, это функция ERROR в консоли Chrome.

Я не уверен, где ошибка ... в javascript или php.

Я не был уверен, нужно ли мне отображать ФОРМУ, откуда идет объект. Если необходимо, сообщите мне, и я уточню вопрос.

На данный момент, пожалуйста, помогите мне выяснить, почему я могу только создать функцию ошибки в сообщении AJAX.

спасибо.

**** EDIT ****

Я удалил DATATYPE в вызове Ajax, и добавил JSON.stringify к данным:

$.ajax({ 
    type: 'POST', 
    url: 'api/editService.php', 
    data: {servce: JSON.stringify(payload)}, 
    success: function(msg){ 
    console.log('success'); 
    }, 
    error: function(msg){ 
    console.log('fail'), msg); 
    } 
}); 

В PHP скрипт, я попытался это:

if(isset($_POST['service')) 
{ 
    $json = json_decode($_POST['service'], true); 

    foreach ($json["service"]["sizeTypes"] as $key => $value){ 
    $insert = mysqli_query($dbc, "INSERT INTO table (COLUMN, COLUMN, COLUMN) VALUES (".$json["service"] . ", " . "$value["id"] . ", " . $value["value"]")"); 
    } 
} 
else 
{ 
    echo "noooooob"; 
} 

С этим обновлением я могу получить сообщение об успешном запуске, но это в значительной степени. Я не могу запустить запрос.

Любые мысли?

+3

Вы могли бы хотеть войти 'msg' вместо' 'fail''. –

+1

I.e .: 'console.log ('fail:', msg);' – MarcoS

+1

И нет оснований использовать 'json_decode()' в вашем PHP, переменная '$ _POST' не будет содержать json. –

ответ

1

Попробуйте изменить

error: function(msg){ 
    console.log('fail'); 
} 

в

error: function(msg){ 
    console.log(msg); 
} 

Там могут быть некоторые ошибки PHP или вопрос синтаксиса и вы должны быть в состоянии видеть его там.

Также попробуйте отладки PHP скрипт шаг за шагом, добавляя что-то вроде

echo "still works";die;

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

Также, если вы ожидаете JSON (а вы - dataType: 'json' в js, не эхо-код HTML в вашем php.

+0

Я изменил функцию ошибки, как было предложено, и я получил следующее консольное сообщение: Object {readyState: 4, responseText: "↵↵", status: 200, statusText: "OK"} Я также удалил теги HTML из скрипта PHP –

2

, не видя ошибку, я подозреваю, что ошибка происходит потому, что Ajax ожидает JSON (DATATYPE: «JSon»), но вы вторя HTML в вашем PHP

1

Как вы отправляете объект на service ключ, вы, вероятно, имеете многомерный массив в $_POST['service'].

Если вы хотите отправить строку, вы должны преобразовать объект в JSON:

data: {service: JSON.stringify(payload)}, 

Теперь вы можете расшифровать его, как вы делаете в PHP.

Также обратите внимание, что вы можете отправлять json только с php, если вы установили dataType в json. В любом случае, кроме действительного json, вы попадете в обработчик error.

+0

Вам не нужно делать это с помощью jQuery, если вы настраиваете его на json. Вы можете передать js-объект и иметь php-массив на back-end – pie6k

+0

^зависит от версии jQuery, я думаю, нет? – Chay22

+0

@AdamPietrasiak Я уверен, что вы это сделали, в противном случае вы получите значения, такие как '$ _POST ['service'] ['sizeTypes'] [..]', что также совершенно справедливо и часто, когда вы используете массивы в своем атрибуты 'name' входов формы. Поэтому OP, вероятно, даже не нужно декодировать текущее значение :-) – jeroen

0

Пример обработки JSON от editService.php. Как правило, сценарий editService.php будет работником и будет обрабатывать все, что вам нужно. Он (обычно) отправит простой ответ назад в метод success (рассмотрите возможность обновления $.ajax для использования последних методов, например $.done и т. Д.). Оттуда вы обрабатываете ответы соответствующим образом.

$.ajax({ 
    method: 'POST', 
    url: '/api/editService.php', 
    data: { service: payload }, 
    dataType: 'json' 
}) 
.done(function(msh) { 
    if (msh.success) { 
     console.log('success'); 
    } 
    else { 
     console.log('failed'); 
    } 
}) 
.fail(function(msg) { 
    console.log('fail'); 
}); 

Пример /editService.php и как работать с JSON через $.ajax

<?php 
$response = []; 
if (isset($_POST['service'])) { 
    // do your stuff; DO NOT output (echo) anything here, this is simply logic 
    // ... do some more stuff 

    // if everything has satisfied, send response back 
    $response['success'] = true; 

    // else, if this logic fails, send that response back 
    $response['success'] = false; 
} 
else { 
    // initial condition failed 
    $response['success'] = false; 
} 
echo json_encode($response); 
+0

Тестирование вашего предложения. Вернется как можно скорее. –

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