2016-06-15 6 views
1

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

HTML

<body> 
    <div> 
    <form id="user"> 
     NOM : <input type="text" name="name"/> 
    </form> 
     <button id="tst" onclick="SHOW();">CLICK</button> 
    </div> 

Javascript

function AFFICHER(){ 

$.ajax({ 
    type: 'POST', 
    url: 'http://localhost:8012/myscript.php', 
    data: $('#user').serialize(), 
    dataType: "json", 
    crossDomain: true, 
    success: function(result) { 
     console.log(result); 
    }, 
    error: function(xhr, textStatus, errorThrown) { 
    console.log('ajax loading error...'); 
    return false; 
    } 
}); 


} 

Мой PHP

<?php 
$decoded = json_decode($_POST['data'],true); 
foreach ($decoded as $value) { 
    echo json_encode($value["name"]); 
} 

?> 

Ошибка

enter image description here

+0

'' Код ниже вызывает функцию обратного вызова ошибки. "' - И ошибка ...? – David

+0

A. Нет необходимости в 'json_decode()' данных '$ _POST', B.' $ _POST ['data'] 'не так, как вы думаете, C. собирайте данные массива внутри' foreach() 'loop и' json_encode() 'is * post * loop. – Marcus

+0

@ Ошибка David - «ошибка загрузки ajax ...», как в моем обратном вызове –

ответ

2

$('#user').serialize() оставит вас со строкой, такие как name=<input-value> (имя будучи имя входного из вашей формы ввода name="name"). Чем больше ваша форма, тем больше значений, которые будут храниться в строке данных, например. name=marcus&phone=555-555-5555&location=interwebs

Чтобы получить доступ к тем, в вашем PHP скрипт, вы запрашиваете их из $_POST массива (так как вы указали type: 'POST' в ваших $.ajax() настройках):

echo $_POST['name']; // marcus

Вам нужно не запустить его через json_decode() так как ваши данные не входят в число JSON, а также вы не можете/не можете получить доступ к $_POST['data'] так, как вы с этого ключа не существует в массиве $_POST.

Ваш цикл foreach() является излишним. Данные, о которых идет речь (которые вы хотите вернуть), уже хранятся в массиве $_POST.

Поскольку ваша программа очень проста, просто закодируйте массив $_POST и отправьте его обратно. Это все, что вам нужно в вашем PHP скрипт:

echo json_encode($_POST); 

Тогда, так как ответ будет JSON, вы можете получить доступ к значениям по ключа/свойств в функции $.ajax().success() обратного вызова:

... 
success: function(result) { 
    console.log(result.name) // will log the value stored in 'name' 
}, 
error: function(xhr, textStatus, errorThrown) { 
    console.log('Status: ' + textStatus, 'Error: ' + errorThrown) 
} 

Я также добавил дополнительную обработку ошибок, чтобы вы могли увидеть, что происходит, если что-то пойдет не так. Научитесь принимать ошибки, чтобы лучше понять вашу программу. Общие ошибки, такие как «не сработали!», «», «подключение к базе данных не удалось!» и/или «ajax call no worky!» бесполезны по понятным причинам.Это всего лишь точки останова в коде, но не дают никаких ценных отзывов о том, почему они были выполнены.

+0

Спасибо Bro. Сохранено меня –

0
<?php 
$decoded = json_decode($_POST['data'],true); 
foreach ($decoded as $value) { 
    return[]=$value["name"]; 
} 
echo json_encode($return); 
?> 
+0

еще не получил ошибку bro –

+0

'return []' не будет работать. Вам не хватает '$' в '$ return []' – Marcus

0

Там нет необходимости декодировать данные на PHP файл ... dataType: "json" означает тип данных ответа после того, как Ajax вызова JSON.

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