2011-02-03 3 views
1

Я просмотрел много сообщений на этом форуме и все еще имею проблемы, не могу обойти его.Борьба с json_decode

я retreiving страницу PHP через AJAX, который вывешивать JSon объект:

$.ajax({ 
    url: myUrl, 
    data: sendData, 
    type: "POST", 
    error: function(xhr, statusText, errorThrown){ 
    // Work out what the error was and display the appropriate message 
    }, 
    success: function(data){ 
    // data retrived ok 
    var myData = data; 
     // do something with data 
    } 
}); 

мой JSON, как это (генерируется с JS):

{"borough": {"id": "3"}, "cat":{"id": "5", "id": "47", "id": "98"}} 

с использованием поджигатель я hecked и его получение прошло через

моя проблема с php, я не могу получить данные json_decoded.

<?php 
    $catPost = $_POST['cat']; 
    echo($catPost); 
    $catData = json_decode($catPost, true); 
    var_dump($catData); 
?> 

эхо-оператор печатает из [объект Object]

но и var_dump печатает пустые

, что я делаю неправильно? как мне получить доступ к значениям «id» diffirent в данных ????

любая помощь очень оценен.

тестовой страницы можно увидеть на http://http://www.reelfilmlocations.co.uk/NEW Search/fullsearch_jq.php

Инструкция по тестированию: (использование ЬЬеТехЬ «Расширенный поиск» под выберите категорию раскрывающегося списка, чтобы выполнить АЯКС вызов также выбрать местечко и somecategories topopulate объект JSON с некоторые данные

РЕДАКТИРОВАТЬ:

JSON создается с помощью следующего скрипта, который считывает значения выбранной Tages из массива:

var sendData = {"borough":[], "cat":[]}; 
//alert('borough tagger add '+BoroughTagger.myIdArray[intIndex]); 
sendData.borough.push({"id":BoroughTagger.myIdArray[intIndex]}); 
$.each(CatTagger.myIdArray, function(intIndex, objValue) { 
    alert('cat Tagger add '+CatTagger.myIdArray[intIndex]); 
    sendData.cat.push({"id":CatTagger.myIdArray[intIndex]}); 
}); 

, который будет создавать объект JSON, как следующее: (проверил это в fiebug)

{"borough": {"id": "3"}, "cat":{"id": "5", "id": "47", "id": "98"}} 

Я теперь с помощью stringData = JSON.stringify(sendData) для передачи данных через AJAX но доцент, похоже, любое имя в post, строка есть, но если я ссылаюсь на нее, используя $myData = $_POST;, то echo «ArrayArray» ошибки json_decode с: Warning: json_decode() ожидает, что параметр 1 будет строкой, массив указан в D: \ wamp \ www \ ReelFilm \ NEW Поиск \ getAdvSearch.php в строке 7

так как мне получить вызов ajax для присвоения имени отправленным sata, чтобы я мог получить к нему доступ, используя $_POST['myData']

+0

Это копия пасты? {"id", "3"} должно быть {"id": "3"} - двоеточие не coma :) возможно, это проблема? –

+0

Вы кодируете его как строку или отправляете непосредственно объект JSON как есть в javascript? –

+0

@tom tu, json на самом деле сгенерирован скриптом, который я набрал это, использует: заменит вопрос, чтобы отразить это. –

ответ

1

Я нашел решение вашей проблемы. Попробуй это.

Возможно, было так, что при использовании jQuery они могут поместить его другим способом, чтобы заставить PHP распознавать его как объект. Я знаю, что вы сделали это в json_decode(), но выход echo() распознает переменную как объект, поэтому вам нужно заставить PHP изменить его на массив.

<?php 
    $catPost = (array) $_POST['cat']; /* PHP may post it as an object, this converts to array, which you'll need to find the data from */ 
    echo($catPost); 
    $catData = json_decode($catPost, true); 
    var_dump($catData); 
?> 

Если это не работает, base64_encode Аякса JQuery() данные перед толкая его на сервер. Вы можете найти функцию base64_encode в phpjs.org в phpjs.org и просто кодировать вашу строку, а затем использовать PHP base64_decode() для декодирования вывода, а затем json_encode().

Надеюсь, это поможет!

+0

получить эту ошибку, если я попробую: Внимание: json_decode() ожидает, что параметр 1 будет строкой, массив указан в D: \ wamp \ www \ ReelFilm \ NEW Search \ getAdvSearch.php в строке 7 –

+0

. Что говорит результат? Попробуйте второе решение и скажите мне, что это говорит. –

+0

hmm Не понимаю, как использовать скрипт, который вы мне тоже поручили. Я смотрю в firbug, и объект json выглядит нормально –

2

Если json_decode() дает вам нулевое значение, используйте json_last_error(), чтобы попытаться определить причину сбоя.

+0

the json_lat_error(); ничего не возвращает эхо $ _POST [ 'кошка'] - [объект Object] var_dump ($ catPost) - строка '[объект Object] (длина = 15) var_dump ($ catData) - нулевые –

1

Попробуйте добавить эту опцию в ваш Ajax-вызов:

traditional:false 

выглядит как-то традиционный вариант ajaxSetup устанавливаются истина (если она есть, не будет не рекурсивная сериализации быть сделана на переданных объектах)

+0

спасибо, но оленья кожа кажется, имеет значение –

+0

Я думаю, что пришло время принять решение, что вы хотите отправить. Прямо сейчас вы отправляете json в виде строки, что не будет иметь эффекта, пока вещь не имеет имени, потому что вы не можете получить доступ к ней без имени из POST-массива. –