0

私は jquery の約束を実践していますが、デモ コードで奇妙なことが起こっています。私のコードは、ボタンをクリックすると、サーバーから単純なjsonデータを受け取ります。done()私は2つの jquery promises を使用してい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 に答える