2014-11-30 2 views
1

Я пытаюсь получить JSON результат с помощью $ HTTP обратного вызова, ниже моей службы:

app.factory('topicContent', ['$http', function($http){ 

    var query = function() { 
     return $http({ 
     method: 'JSONP', 
     url: 'http://daysof.me/lowyat/thread.php?callback=JSON_CALLBACK' 
     }); 
    } 

    return { 
     request : function(){ 
      return query(); 
     } 


    } 
}]); 

и внутри моего контроллера я, как этот

topicContent.request().success(function(data){ 
    $scope.threadContent = data.data; 
    }); 

Но почему мой threadContent ничего не вернул?

+0

Вы проверили с помощью инструментов разработчика браузера, чтобы проверить, правильно ли отправлен запрос и какой ответ? –

+0

@camden_kid это 200, и я видел мои вещи в обратном вызове, но интересно, почему это не работает, когда я использовал .success для получения данных. –

ответ

1

Мне кажется, что вам не нужно читать свойство объекта ответа, если вы используете success (вам нужно было бы в случае then). Это должно быть:

topicContent.request().success(function(data){ 
    $scope.threadContent = data; 
}); 
+0

Я пробовал это, но ничего не получил. –

+0

Я пробовал \t \t console.log ($ scope.threadContent); , но консоль не появляется. –

+0

Поскольку эта служба не реализует JSONP. Вы уверены, что это поддерживает? – dfsq

1

Проблема здесь, ваш URL-адрес не возвращается JSON.

Содержимое-тип text/html, оно должно быть application/json.

Попробуйте переключить свой URL с любыми другими поддерживаемыми JSONP-адресами, как показано ниже, и это сработает.

https://api.github.com/gists 

Если вы посмотрите на консоль инструментов разработчика Chrome, вы увидите сообщение.

Resource interpreted as Script but transferred with MIME type text/html 

Вам нужно настроить сервер для отправки ответа на JavaScript с

Content-Type: application/javascript or application/json 
+0

Эхо с json_encode не означает, что он станет json-форматом? –

+0

если не используете jsonp, он будет работать. Теперь я путаю btw json и jsonp. –

+0

Я так не думаю, вам нужно настроить ответ сервера на приложение/json или application/javascript. –

0

PHP

public function getData() 
{ 
    header("Content-Type: text/javascript"); 
    // or try header("Content-Type: application/json"); 
    $data = array(); 
    echo $_GET["callback"] . "(" . json_encode($data) . ")"; 
    // or try $_GET["url"]["callback"] . "(" . json_encode($data) . ")"; 
} 

JavaScript

var url = ".../getData?callback=JSON_CALLBACK"; 
$http.jsonp(url).success(function(data) { 
}); 

Это хороший кусок о AngularJS и AJAX с detai ls about AngularJS и JSONP http://tutorials.jenkov.com/angularjs/ajax.html

+0

Я получил эту ошибку в php: не могу изменить информацию заголовка - заголовки уже отправлены –

+0

@Alexwood Вы используете CakePHP, если это возможно? Если это так, попробуйте заголовок $ this-> («Content-Type: text/javascript»); и $ this -> ["url"] ["callback"]. "(". json_encode ($ data). ")"; –

Смежные вопросы