0

我正在练习 jquery 承诺,我的演示代码中发生了一些奇怪的事情。我的代码所做的是,当我单击按钮时,它会从服务器接收一个简单的 json 数据。我正在使用两个 jquery 承诺,一个是done(),第二个是fail()。当我单击按钮时,它会从服务器接收数据,done()但未执行数据显示在控制台中fail()。为什么以及如何解决这个问题?以下是我的代码

jQuery

        var Obj = function () {
            return {
                gets: function (successHandler, errorHandler) {
                    console.log('hello');
                    return $.ajax({
                        url: '/server.php',
                        dataType: 'JSON',
                        type: 'GET'
                    });
                }
            }
        };

        $('.button').on('click', function () {
            var obj = new Obj();
            var promise = obj.gets();

            promise.done(function (data) {
                console.log(data);
            });

            promise.fail(function (e) {
                console.log(JSON.stringify(e)); //this logs below
            });

输出

{"readyState":4,"responseText":"<?php\n$response = array('oranges', 'apples', 'berries');\nexit(json_decode($response));","status":200,"statusText":"OK"} 

这是我的php代码

$response = array('oranges', 'apples', 'berries');
exit(json_decode($response));
4

1 回答 1

0
return $.ajax({
   url: '/server.php'
   dataType: 'JSON',
   ...

"responseText":"<?php\n$response = array ...

jQuery 期望JSON,但服务器提供PHP源。因此抛出解析异常,Deferred被拒绝并被.fail()调用。

于 2013-07-04T20:47:41.040 回答