Ajax返回值返回不起作用

时间:2013-08-02 07:52:52

标签: php ajax

我有2个文件(call.php和post.php)并使用ajax传递值从call到post,我想从post获得返回值,但这不起作用。当我改变帖子,修改“返回”到“回声”,它有效,但我不知道为什么。任何人都可以给我一个帮助?
    最值得赞赏的例子。

call.php

 <script type="text/JavaScript">
 $(document).ready(function(){
    $('#submitbt').click(function(){
    //var name = $('#name').val();
    //var dataString = "name="+name;
    var dataPass = {
            'name': $("#name").val()
        };
    $.ajax({
        type: "POST",
        url: "post.php",        
        //data: dataString,        
        data: dataPass,//json
        success: function (data) {            
            alert(data);
            var re = $.parseJSON(data || "null");
            console.log(re);    
        }
    });
   });
});
</script>

post.php中:

<?php
    $name = $_POST['name'];
    return json_encode(array('name'=>$name));
?>

更新

相比之下 当我使用MVC时,“返回”会触发。

public function delete() {
        $this->disableHeaderAndFooter();

        $id = $_POST['id'];
        $token = $_POST['token'];

        if(!isset($id) || !isset($token)){
            return json_encode(array('status'=>'error','error_msg'=>'Invalid params.'));
        }

        if(!$this->checkCSRFToken($token)){
            return json_encode(array('status'=>'error','error_msg'=>'Session timeout,please refresh the page.'));
        }

        $theme = new Theme($id);        
        $theme->delete();

        return json_encode(array('status'=>'success')); 
    }



   $.post('/home/test/update',data,function(data){

                var retObj = $.parseJSON(data);

                //wangdongxu added 2013-08-02
                console.log(retObj);        

                //if(retObj.status == 'success'){
                if(retObj['status'] == 'success'){                  
                    window.location.href = "/home/ThemePage";
                }
                else{
                    $('#error_msg').text(retObj['error_msg']);
                    $('#error_msg').show();
                }
            });

2 个答案:

答案 0 :(得分:2)

这是预期的行为,Ajax将把所有内容输出到浏览器。

return仅在您将返回的值与另一个php变量或函数一起使用时才有效。

简而言之,php和javascript无法直接通信,它们只通过php回显或打印进行通信。当使用Ajax或php与javascript时,你应该使用echo / print而不是return。


事实上,据我所知,php中的return甚至不经常在全局范围内使用(在脚本本身上),它更可能用在函数中,所以这个函数保存一个值(但是不一定输出它)所以你可以在php中使用该值。

function hello(){
    return "hello";
}

$a = hello();
echo $a; // <--- this will finally output "hello", without this, the browser won't see "hello", that hello could only be used from another php function or asigned to a variable or similar.

它正在研究MVC框架,因为它有几个层,可能delete()方法是模型中的一个方法,它将其值返回给控制器,而控制器echo将此值转换为图。

答案 1 :(得分:0)

$.ajax()

中使用dataType选项
dataType: "json"

post.php 中试试这个,

<?php
    $name = $_POST['name'];
    echo json_encode(array('name'=>$name));// echo your json
    return;// then return
?>