Как вернуть данные из поста AJAX из PHP? - PullRequest
2 голосов
/ 19 августа 2011

Я пытаюсь вернуть значения из $.post, и ничего не получаю.Вот фрагменты кода:

<!-- language: lang-js -->

$(document).ready(function(){
$('.d1').dblclick(function() {
    $(this).css("background-color","blue");
    var datas =  $(this).attr('id');

    $.post(

            "simpleData.php",
            {"chess":datas},
            {dataType: "JSON"},
            {async:false},
            {contentType: "application/json; charset=utf-8"},
              {success: function(msg){
                 alert(msg.d);
                 var resultAsString = msg.d;
                 document.write(resultAsString);
    }

          });       
    });

});

Вот разделение для вывода.Я не получаю вывод здесь:

<!-- language: lang-php -->    

<div id = "output">
<?php
echo "This is the default output <br />";


echo $_REQUEST['chess'];

?>                      

<?php

print_r($_REQUEST);

?> 

Вот вызываемая программа php (simpleData.php):

<!-- language: lang-php -->

<html>
<body
<?php
$move_from = $_REQUEST['chess'];
var_dump($_REQUEST);
echo "this is move_from  $move_from";
?>

</body>
</html>

Я получаю правильный выводиз этого, но это никогда не появляется в div.Кроме того, я не получаю вывод из оповещения.

Помогите и посоветуйте, пожалуйста.

Вот обновленный код , который, к сожалению, все еще не работает.Результат появляется в DIV, но все, что он говорит, это «неопределенный».Кроме того, шахматная доска, которая находится на странице, уничтожена.

<script type="text/javascript">

$.ajaxSetup ({  
    cache: false  
});  

$(document).ready(function(){
    $('.d1').dblclick(function() {
        $(this).css("background-color","blue");
        var datas =  $(this).attr('id');

$.post("simpleData.php", {
            data: {"chess":datas},
            dataType: "json",
            async:false,
            contentType: "application/json; charset=utf-8",
            header: "HTTP/1.1 200 OK",
            success: function(html){
               var resultAsString = html;
               $("#output").html(resultAsString);      
              document.write(resultAsString);
            }    
});


</script>

Вот программа [simpleData.php], которая называется:

<html>
<body

 <?php
$move_from = $_REQUEST['chess'];
var_dump($_REQUEST);
echo "this is move_from  $move_from";

?>

</body>
</html>

Вот вывод html изFirebug:

Notice: Undefined index: chess in /var/www/simpleData.php on line 12 array(6) { ["data"]=> array(1) { ["chess"]=> string(2) "e8" } ["dataType"]=> string(4) "json" ["async"]=> string(5) "false" ["contentType"]=> string(31) "application/json; charset=utf-8" ["header"]=> string(15) "HTTP/1.1 200 OK" ["success"]=> string(9) "undefined" } this is move_from

Помощь и совет, пожалуйста.Спасибо

Это самый последний код:

<script type="text/javascript">

$.ajaxSetup ({  
cache: false  
});  

$(document).ready(function(){
$('.d1').dblclick(function() {
    $(this).css("background-color","blue");
    var datas =  $(this).attr('id');

$.post("simpleData.php", {
        data: {"chess":datas},
        dataType: "json",
        async:false,
        contentType: "application/json; charset=utf-8",
        header: "HTTP/1.1 200 OK",
        success: function(html){
           newProcessData(html);
        }

        });

    }); 
});

function newProcessData(html){
    var resultAsString = html;
    $("#output").html(resultAsString);
    document.write(resultAsString);
    alert("yippee");
}

Вот программа, которая называется (simpleData.php) [она имеет не изменено]

<html>
 <body>
<?php
$move_from = $_REQUEST['chess'];
var_dump($_REQUEST);
echo "this is move_from  $move_from";
?>

</body>
</html>

Я знаю, что код достиг функции newProcessData, поскольку отображается предупреждение.

Вот вывод из Firebug:

Заголовки:

Date    Mon, 22 Aug 2011 04:01:42 GMT
Server  Apache/2.2.19 (Debian)
X-Powered-By    PHP/5.3.7-1
Vary    Accept-Encoding
Content-Encoding    gzip
Content-Length  401
Keep-Alive  timeout=15, max=99
Connection  Keep-Alive
Content-Type    text/html
Request Headersview source
Host    localhost
User-Agent  Mozilla/5.0 (X11; Linux i686; rv:6.0) Gecko/20100101 Firefox/6.0 Iceweasel/6.0
Accept  */*
Accept-Language en-us,en;q=0.5
Accept-Encoding gzip, deflate
Accept-Charset  ISO-8859-1,utf-8;q=0.7,*;q=0.7
Connection  keep-alive
Content-Type    application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With    XMLHttpRequest
Referer http://localhost/jq3_test.php
Content-Length  137
Pragma  no-cache
Cache-Control   no-cache

POST:

async   false
contentType application/json; charset=utf-8
dataType    json
data[chess] e8
header  HTTP/1.1 200 OK
success undefined
Source
data%5Bchess%5D=e8&dataType=json&async=false&contentType=application%2Fjson%3B+charset%3Dutf-8&header=HTTP%2F1.1+200+OK&success=undefined

HTML:

Notice: Undefined index: datas in /var/www/simpleData.php on line 13 array(6) { ["data"]=> array(1) { ["chess"]=> string(2) "e8" } ["dataType"]=> string(4) "json" ["async"]=> string(5) "false" ["contentType"]=> string(31) "application/json; charset=utf-8" ["header"]=> string(15) "HTTP/1.1 200 OK" ["success"]=> string(9) "undefined" } this is move_from

Любая помощь, которая может быть оказана, будет высоко оценена Спасибо

Ответы [ 5 ]

2 голосов
/ 19 августа 2011

Вы можете обратиться к официальной документации jquery для получения простых примеров публикации в php и обновления div:

http://api.jquery.com/jQuery.post/

, таких как:

$.post('ajax/test.html', function(data) {
  $('.result').html(data);
});
2 голосов
/ 19 августа 2011

это может быть не полной причиной, но когда jQuery запрашивает dataType: 'json', который, кстати, в руководстве показан как строчные, а не прописные (не уверен, если это имеет значение) - PHP должен определитьвыводить как json с заголовками (а также возвращать статус OK), например так:

header("HTTP/1.1 200 OK");
header('Content-type: application/json');

перед тем, как выводить какие-либо данные.

Также не возвращайте теги html, просто вызовите заголовки json, вывод эха, затем выход ().

О, и массив должен быть закодирован в JSON:

echo json_encode($_REQUEST['chess']);

РЕДАКТИРОВАТЬ: Я думаю, что вы, возможно, положили некоторыеэтого совета в неправильных местах - попробуйте это.Ваш simpleData.php от начала до конца должен выглядеть так, чтобы возвращать данные JSON:

<?php
header("HTTP/1.1 200 OK");
header('Content-type: application/json');
echo json_encode($_REQUEST);
exit();
?>

Обратите внимание на отсутствие окружающих тегов HTML или чего-либо, кроме тегов php.Вы не можете использовать его в обоих случаях: скрипт, который возвращает HTML для отладки, и скрипт, который возвращает правильный JSON, который не нарушит сообщение jQuery.

Если вы хотите увидеть ответ JSON для simpleData.php при поискена HTML-странице, создающей сообщение, установите инструмент, такой как плагин firebug для firefox, и посмотрите, как панель NET сможет точно проверить, что происходит с сообщением.

Теперь удалите материал типа содержимого заголовкаиз вашего JavaScript, который был добавлен не в том месте:

$.post("simpleData.php", {
        data: {"chess":datas},
        dataType: "json",
        async:false,
        contentType: "application/json; charset=utf-8",
        header: "HTTP/1.1 200 OK",
        success: function(html){
           newProcessData(html);
        }

        });

должно стать:

$.post("simpleData.php", {
        data: {"chess":datas},
        dataType: "json",
        async:false,
        success: function(html){
           newProcessData(html);
        }

        });
0 голосов
/ 21 августа 2011

Я не программист PHP, но основываясь на следующих выводах, которые вы предоставили


["data"]=> array(1) { ["chess"]=> string(2) "e8" } 

Похоже, что "шахматные" данные все еще находятся в "данных" в $ _REQUEST.Вместо этого вы должны попробовать выполнить $ _REQUEST ['data'] ['chess'] и посмотреть, сработает ли это.

0 голосов
/ 19 августа 2011

Я думаю, что вы должны быть в исходном файле, а не в .php файле.

{success: function(msg){
                 alert(msg.d);
                 var resultAsString = msg.d;
                 //document.write(resultAsString);
                 $("#output").html(resultAsString); //this will add it to the div
    }
0 голосов
/ 19 августа 2011
$.post("simpleData.php", {
            data: {chess:datas},
            dataType: "html",
            async:false,
            success: function(html){
               alert(html);
               var resultAsString = html;
               document.write(resultAsString);
            }    
});

Ваш синтаксис немного странный, попробуйте указанную выше версию (хотя, если честно, document.write не следует использовать нормально).

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