2012-03-05 4 views
3

У меня проблема очень похожа на эту: jquery json function returning null.Функция PHP возвращает «null» для метода успеха в вызове jQuery.ajax

Я следил за приведенным выше советом, однако, я все еще вижу null.

Вот мой код:

JS:

Gallery.prototype.getImages = function(opt){ 
    var self = this; 
     var baseurl = 'http://local.gallery.dev' 
    $.ajax({ 
    url: baseurl+='/controllers/ajax.php', 
    type: 'POST', 
    contentType: 'application/json; charset=utf-8', 
    data: {action : opt}, 
    dataType: 'JSON', 
    success: function(data){ 
     //self.setImages(data); 
     console.log(data) 
    }, 
    error: function(){ 
     console.log('NOPE'); 
    } 
    }); 
} 

PHP:

class ajax_controller { 

function __construct(){ 

    if(isset($_POST['action']) && !empty($_POST['action'])) { 
     $action = $_POST['action']; 
     switch($action) { 
      case 'Newborn' : $this->Newborn(); 
       break; 
     } 
    } 
} 
/* 
* Process Newborn Gallery request. 
*/ 
public function Newborn(){ 
    header('Content-type: application/json'); 
    echo json_encode(array(
     'images/gallery/albums/newborn/kylie/thumbnail/kylie-album.jpg', 
     'images/gallery/albums/newborn/payton/thumbnail/payton-1-thumbnail.png' 
    )); 
} 
} 

Консоль/отладчик/сетевой панели все говорят, что я разговариваю с контроллером АЯКС правильно , однако метод data метода успеха возвращает null.

Я довольно новичок в PHP, любые предложения были высоко оценены.

Спасибо, Кен

UPDATE

Мой вызов еще возвращается нуль, поэтому я думал, я бы вставить свои заголовки здесь.

Request URL:http://local.sunnyrose.dev/controllers/ajax.php 
Request Method:POST 
Status Code:200 OK 
Request Headersview source 
Accept:application/json, text/javascript, */*; q=0.01 
Accept-Charset:ISO-8859-1,utf-8;q=0.7,*;q=0.3 
Accept-Encoding:gzip,deflate,sdch 
Accept-Language:en-US,en;q=0.8 
Connection:keep-alive 
Content-Length:14 
Content-Type:application/json; charset=UTF-8 
Host:local.sunnyrose.dev 
Origin:http://local.sunnyrose.dev 
Referer:http://local.sunnyrose.dev/ 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.11 (KHTML,    

like Gecko) Chrome/17.0.963.56 Safari/535.11 
X-Requested-With:XMLHttpRequest 
Request Payload 
action=Newborn 
Response Headersview source 
Connection:Keep-Alive 
Content-Length:0 
Content-Type:application/json 
Date:Mon, 05 Mar 2012 17:49:53 GMT 
Keep-Alive:timeout=5, max=92 
Server:Apache/2.2.14 (Unix) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l PHP/5.3.1 mod_perl/2.0.4  

Perl/v5.10.1 
X-Powered-By:PHP/5.3.1 
+0

Спасибо за все ответы, ребята, меняя мой код сейчас. Скоро будет обновляться. – Ken

ответ

2

Я не думаю, что это создаст действительный JSON. Если вы хотите реальный массив с помощью цифровых клавиш, то с помощью цифровых клавиш в PHP массива:

echo json_encode(array(
    1 => 'images/gallery/albums/newborn/kylie/thumbnail/kylie-album.jpg', 
    2 => 'images/gallery/albums/newborn/payton/thumbnail/payton-1-thumbnail.png' 
)); 

ИЛИ

echo json_encode(array(
    'images/gallery/albums/newborn/kylie/thumbnail/kylie-album.jpg', 
    'images/gallery/albums/newborn/payton/thumbnail/payton-1-thumbnail.png' 
)); 

, который будет выводить следующие ЯШ:

[ 
    'images/gallery/albums/newborn/kylie/thumbnail/kylie-album.jpg', 
    'images/gallery/albums/newborn/payton/thumbnail/payton-1-thumbnail.png' 
] 
+0

Другими словами, удалите одинарные кавычки из '' 1 '=> 'и т. Д.,? Я сделал это, все еще вернув null. Не уверен, почему у меня это было там, в первую очередь. – Ken

1

что вы используете часть url

url: '/controllers/ajax.php', 

попробуйте использовать полный url

как

var baseurl = 'http://www.example.com'; 

url: baseurl+'/controllers/ajax.php', 

EDIT

попробуйте изменить

header('Content-type: application/json') 

в

header('Content-type: text/json'); 

или

header('Content-type: text/plain'); 

https://stackoverflow.com/questions/267546/correct-http-header-for-json-file

+0

Все еще возвращает null. Я разрабатываю это локально на своем собственном vhost в apache «http://local.sitename.dev» может ли это вызывать проблемы с одинаковым происхождением? – Ken

+0

@ken: не так долго вы получаете доступ к сайту с тем же доменным именем. – prodigitalson

3

эхо в конце constructor.i думает, что вы оленья кожа эха-либо в контроллере, поэтому Аякс ответ является недействительным. описание товара weioch каркас u использование?

+0

Я не совсем понимаю, что вы имеете в виду. Можете ли вы показать его в коде? – Ken

+0

На самом деле я даже не поймал это. Он все равно должен звучать, но, тем не менее, он может вызвать проблемы на линии. +1 – prodigitalson

+0

Если бы вы могли привести пример того, что вы имеете в виду, я был бы uber greatfull. Все еще путается в логике «эха». – Ken

2

В файле /controllers/ajax.php вы используете свои функции?

class ajax_controller { 
    function __construct(){ 
     if(isset($_POST['action']) && !empty($_POST['action'])) { 
      $action = $_POST['action']; 
      switch($action) { 
       case 'Newborn' : return $this->Newborn(); 
        break; 
      } 
     } 
    } 
    /* 
    * Process Newborn Gallery request. 
    */ 
    public function Newborn(){ 
     header('Content-type: application/json'); 
     return json_encode(array(
      'images/gallery/albums/newborn/kylie/thumbnail/kylie-album.jpg', 
      'images/gallery/albums/newborn/payton/thumbnail/payton-1-thumbnail.png' 
     )); 
    } 
} 

$controller = new ajax_controller; 
echo $controller->__construct(); 
+0

Отличный улов! - все еще возвращающ ноль, однако :( – Ken

0

Я, наконец, вырыл вокруг заголовков и понял, что проблема в том, что. ajax() отправил мой PHP-скрипт пустым массивом.

Исправление должно было избавиться от contentType: 'application/json; charset=utf-8 и функции header() в скрипте PHP.

Теперь он отправляет и получает данные в порядке. (идет читать на конфигурации документации)

Спасибо за всю помощь - мой скрипт, ве сломанных по другим причинам, ж/о многих из ваших ответов :)

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