Php函数返回是一个使用Ajax的空数组,否则不是

时间:2015-08-28 07:44:01

标签: php jquery ajax cakephp

我正在使用CakePHP框架。我的问题是,当我打印一个php函数时,它给了我一个包含很多成员的数组,但是当使用与Ajax相同的函数时,响应是空的。

Ajax响应函数:

public function functionOne(){

    $this->autoRender = false;

    if ($this->request->is('ajax')) {
        if(!$this->request->data['amount']) {
            $json['errors'][] = 'Fill in all the required fields';
        }elseif(!is_numeric($this->request->data['amount'])){
            $json['errors'][] = 'Field amound has to be a number';
        }
        if(!$this->request->data['currency_from']){
            $json['errors'][] = 'Fill in all the required fields';
        }
        if(!$this->request->data['currency_to']){
            $json['errors'][] = 'Fill in all the required fields';
        }
        if(!$this->request->data['rate_date']){
            $json['errors'][] = 'Fill in all the required fields';
        }
        if(isset($json['errors'])){
            $json['status'] = 'error';
        }else{
            $json['status'] = 'success';

            $json['curs'] = $this->functionTwo($this->request->data['date1']);
            $json['rates'] = $this->functionThree($this->request->data['date'], $this->request->data['from'], $this->request->data['to'], $this->request->data['amount']);
        }

        print_r(json_encode($json));

    }

}

查看文件ajax请求:

   $(document).ready(function(){
        $('#converter').on('submit', function(e) {
            var form = $(this);
            e.preventDefault();
            $.ajax({
                url: '<?php echo $this->Html->url(array(
                        "controller" => "cur",
                                "action" => "functionOne"
                        ));
                        ?>',
                data: form.serialize(),
                type: 'post',
                async: true,
                success: function (data) {
                    var json = data;
                    if (json.status == 'error') {
                        $('#errors').show();
                        $('#currencies').hide();
                        $('#errors').html('');
                        $.each(json.errors, function (k, v) {
                            $('#errors').append("<span>" + v + "</span>");
                        });
                    }
                    if (json.status == 'success') {
                        var json = data;
                        $('#errors').hide();
                        $('#currencies').show();
                    }
                }
            });
        })
    });

getCur方法以“code”=&gt;格式返回一个数组“名称”。它从阅读不同来源的XML文件中获取货币。当我在响应之外打印函数时它给了我一个正确的结果但是使用ajax它只给了我一个空数组。

但错误正在通过回应传来。

谢谢!

3 个答案:

答案 0 :(得分:0)

你使用的是什么版本的蛋糕?
取决于蛋糕的版本。

1.3.x:

$this->RequestHandler->isAjax();
2.x

$this->request->is('ajax');

您还可以检查Chrome网络标签是否存在任何特定问题。

答案 1 :(得分:0)

尝试:

  1. 回复你的json,如onUse
  2. 成功回调时,使用:

    解析数据变量
    echo json_encode($json);

    查看控制台内的数据。

答案 2 :(得分:0)

错误是我在方法中创建了实例,所以ajax认为我没有。

感谢您的回复!