#php #jquery #ajax
#php #jquery #ajax
Вопрос:
Я только что создал AJAX-функцию. В firebut нет ошибок, и возвращается правильный ответ, но по какой-то причине он не заполнит значение поля #дерьмо из fill the div html #outdirections.
AJAX ::
function appdirections() {
var start = $('#start').val();
var end = $('#end').val();
var dataString = 'start=' start 'amp;end=' end;
$.ajax({
type: 'POST',
url: 'http://www.golfbrowser.com/courses/wentworth-east/?appdirections',
data: dataString,
beforeSend: function() {
},
dataType:'json',
success: function(data) {
$('#outdirections').html(data.output);
$('#crap').val(data.output);
},
error: function(data) {
},
});
}
PHP ::
<?php
$start = $_POST['start'];
$end = $_POST['end'];
$xml = simplexml_load_file('http://maps.googleapis.com/maps/api/directions/xml?origin='.$start.'amp;destination='.$end.'amp;sensor=false');
// data to fetch
$start = $xml->xpath("/DirectionsResponse/route/leg/start_address");
$end = $xml->xpath("/DirectionsResponse/route/leg/end_address");
// output
echo json_encode( array('output'=>$start));
?>
HTML
<input type="text" id="crap" value=""/>
<div id="outdirections"></div>
<input id="start" type="text" spellcheck="false" placeholder="enter your post code" onkeypress="if (event.keyCode == 13) {appdirections();}"/>
<input id="end" type="text" value="wentworth virginia water" disabled="disabled"/>
Вот ответ от Firebug
{"output":[{"0":"Winkfield, Windsor, Berkshire SL4 2ES, UK"}],"end":[{"0":"Wentworth, Surrey GU25 4, UK"}]}
Комментарии:
1. вы пытались посмотреть, что находится в данных, выполнив console.debug (data.output); ?
2. Попробуйте сначала с каким-нибудь жестко закодированным текстом после успеха, проверьте, обновлены ли эти закодированные данные до этих полей.
3. Завершающая запятая в вашем объекте, переданном
$.ajax
, завершается ошибкой в старых версиях IE.
Ответ №1:
Скорее всего, у вас ничего нет в data.output
Попробуйте это и посмотрите, что это выдает
$('#outdirections').html(data);
$('#crap').val(data);
Я предполагаю, что #crap — это поле ввода?
Редактировать
в любом случае, попробуйте это alert(data.output[0].get("0"))
или, если бы вы упростили, вы могли бы сделать это:
alert(data.output[0])
Комментарии:
1. Нет, дело не в этом. Я обновил вопрос ответом от Firebug
2. Итак, вы получаете обратно объект, который содержит массив объектов. Вы уверены, что не хотите упростить его, изменив его структуру на:
{"output":["Winkfield, Windsor, Berkshire SL4 2ES, UK"],"end":["Wentworth, Surrey GU25 4, UK"]}
?3. Да, я знаю. Эта информация поступает из XML-канала. Я не знаю, почему он добавляет 0: к результату
Ответ №2:
<input id="#start" onkeypress="if (event.keyCode == 13) {appdirections();}" />
подразумевает, что этот код работает только для event.keyCode == 13
условия…….Это клавиша ввода, и элемент ввода не будет содержать значение клавиши ввода, как a / b / c (я так думаю). Для этого, когда вы нажимаете enter и вызываете appdirections()
функцию $('#start').val()
, значение равно null, следовательно, код не работает…
Поместите поля ввода внутри <form>
тега и вызовите ajax-функцию при отправке.
Вы уверены, что получаете правильные данные? Попробуйте поместить оповещение внутри success и проверить, работает ли оно.
Ответ №3:
Посмотрите на страницу руководства для SimpleXMLElement::xpath
:
public array SimpleXMLElement::xpath ( string $path )
Этот метод возвращает массив значений, соответствующих запросу XPath. Затем вы кодируете массив с помощью json_encode
и, неожиданный сюрприз, он превращает его в массив JSON.
У вас есть два варианта. Вы можете получить элемент массива либо с помощью PHP, либо с помощью Javascript. Я думаю, это проще сделать с помощью PHP, и это сэкономит несколько байт!
echo json_encode( array('output'=>$start[0]));
Комментарии:
1. Это должно было сработать, но оно по-прежнему возвращает object Объект в предупреждении