Что должен сгенерировать PHP, чтобы вернуть запрос JQuery AJAX? - PullRequest
1 голос
/ 13 марта 2010

Возможно, это синтаксическая ошибка, но я никогда не предполагал это.У меня есть -dead- простой AJAX-тест:

http://www.mcphersonindustries.com/bucket/api.php - это файл с просто:

<?php echo "test"; ?>

И у меня есть Apache как localhost с этим запущенным битом jQuery:

$(document).ready(function() {

function doAjaxPost() {  
    $.ajax({  
       type: "POST",  
       url: "http://www.mcphersonindustries.com/bucket/api.php",  
       data: "null",  
       success: function(resp){   
           console.log("Response: '" + resp + "'");  
       },  
       error: function(e){  
           console.log('Error: ' + e);  
       }  
    });  
}  

doAjaxPost();

});

Так что Firebug каждый раз выплевывает Response: '', но через запрос ничего не приходит.Нужно ли объявлять заголовок в PHP?Я где-то совершаю глупую ошибку?

Спасибо за понимание, как всегда.

Ответы [ 5 ]

2 голосов
/ 13 марта 2010

Вы не можете использовать AJAX для нескольких сайтов без авторизации этого домена:

http://ejohn.org/blog/cross-site-xmlhttprequest/

2 голосов
/ 13 марта 2010

В вашем примере ваш Javascript ожидает возврата XML или HTML. Вы можете быть явно об этом, но указав параметр dataType. Это то, что вы хотите вернуть? Если это так, PHP должен сделать это:

<?php
echo '<p>hello world</p>'; // "text/html" is implied
?>

Кроме того, я не уверен, почему вы определяете функцию внутри документа, а не на глобальном уровне. Возможно, это проблема.

Обычно люди хотят вернуть JSON, в этом случае это должно выглядеть так:

<p>What is your name?</p>
<input type="text" id="name">
<input type="button" id="send" value="Send">

с

$(function() {
  $("#send").click(doAjaxPost);
});

function doAjaxPost() {
  $.ajax({
    type: "POST",
    url: "http://www.mcphersonindustries.com/bucket/api.php",  
    data: {
      name: $("#name").val()
    },
    dataType: "json",
    success: function(resp) {   
      alert(resp.result);
    },  
    error: function(e){  
      console.log('Error: ' + e);  
    }
  });
}

и PHP:

<?php
header('Content-Type: application/json');
$name = $_POST['name'];
$out = array('result' => 'Hello, ' . $name);
echo json_encode($out);
?>
1 голос
/ 13 марта 2010

Вы выполняете сценарий с того же хоста, или это другое местоположение. Если это так, вам нужно использовать метод JSONP. Этот метод позволяет создавать междоменные вызовы функций.

В процессе JSONP вызывающий javascript создает уникальное имя для функции и отправляет его вызывающему сценарию через запрос get. скрипт php создает файл javascript с переменной с таким именем и возвращает его клиенту, который включает и выполняет этот фрагмент скрипта.

1 голос
/ 13 марта 2010

Если это одна строка, число или логическое значение, вы можете просто echo указать это в своем PHP-скрипте. Если это более сложный тип (например, массив вещей или иерархические данные), JSON - самый легкий способ его передачи.

Обычно вы можете просто взять массив или объект PHP и вызвать echo json_encode() с ним в качестве аргумента.

Чтобы разобрать его, просто добавьте dataType: 'json' к вашему хешу.

0 голосов
/ 13 марта 2010

Возможно, это может быть связано с тем, что jquery выводит тип данных из заголовка ответа http сервера в виде text / html, но фактическое значение не является html.

Это кажется натяжкой, но это все, что я могу придумать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...