2013-07-04 106 views
0

我正在練習jQuery的承諾和一些奇怪的事情發生在我的演示代碼。我的代碼做的是當我點擊按鈕,然後它從服務器接收一個簡單的json數據。我使用兩個jQuery的承諾之一是done(),第二個是fail()。當我點擊按鈕它從服務器接收數據,但done()未執行數據顯示在控制檯通過fail()。爲什麼以及如何解決這個問題?以下是我的代碼問題與jQuery的承諾

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)); 
+2

您的服務器似乎不會將'server.php'解析爲PHP文件。你在'responseText'中獲得了原始的PHP代碼。 – Dogbert

回答

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

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

jQuery預計JSON,但服務器提供PHP源。因此解析異常被拋出,Deferred被拒絕,.fail()被調用。

+0

我該如何解決這個問題? – 2619

+0

配置您的服務器以使其運行「PHP」代碼。如果你不能運行,那麼這將是另一個'PHP'標籤的問題;) – zeroflagL