2013-07-04 3 views
0

Я практикую jquery обещания и что-то странное происходит в моем демо-коде. Что мой код делает, когда я нажимаю кнопку, тогда он получает простые данные json с сервера. Я использую два обещания jquery: done(), а второй - fail(). Когда я нажимаю кнопку, он получает данные с сервера, но done() не выполняет данные, отображается в консоли через fail(). Почему и как я могу это решить? Ниже мой кодвопрос с jquery promises

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. Вы получаете необработанный PHP-код в 'responseText'. – 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