AJAX без функций

#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 Объект в предупреждении