Конвертируйте Javascript ассоциативный объект и выводите его на PHP - PullRequest
2 голосов
/ 19 января 2012

Используя Javascript, я создаю ассоциативный объект с именем basketItems. (это напоминает ассоциативный массив). Затем я добавляю к нему объекты 'item', которые содержат определенные спецификации элементов, как показано ниже:

// create main basketItems Object
var basketItems = new Object();

function createItem() {
    var item = new Object();
    item["number"] = number variable;     
    item["color"] = color variable;
    item["engine"] = engine variable;
    item["shape"] = shape variable;
    item["seats"] = seats variable;
    item["price"] = price variable;

    var itemUnique = unique variable;

    // Add Item into BasketItems Object
    basketItems[itemUnique] = item;
}

Затем я отправляю basketItems на сервер, используя почту, и на стороне сервера мой код PHP:

<?php
$basketItems = $_POST['items'];
print $basketItems;
?>

Это дает мне полный объект basketItems и выводит его, как показано ниже:

{ 546523 = { seats = \"FOUR\"; shape = \"HATCHBACK\"; price = \"6500\"; engine = \"TWO LITRE\"; color = \"ORANGE\"; number = \"36408974\"; }; }

Мне нужно иметь возможность вызывать определенные части объекта basketItems, а не только полное содержимое. Я попробовал несколько попыток, используя приведенное ниже выражение 'foreach', но я всегда получаю неверный аргумент foreach :

<?php
$basketItems = $_POST['items'];

foreach($basketItems as $key => $item) {
print $item['shape'];
}
?>

Как я могу достичь вышеизложенного, чтобы я мог выбрать, скажем, только значение 'shape' для всех элементов в объекте basketItems?

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

Заранее спасибо

--------------------- Быстрое обновление ------------------ -

Javascript все используется в мобильном приложении, встроенном в Titanium Appcelerator. Я не публикую его с JSON, просто как стандартный объект. Сообщение отправляется, как показано ниже:

var xhr = Ti.Network.createHTTPClient();
xhr.open('POST', 'http://www.xxxxxx.com/xxxxxx.php');
xhr.onload = function () {webview.html = this.responseText;};
xhr.send({items:basketItems});

Ответы [ 2 ]

1 голос
/ 19 января 2012

Предполагается ли, что это строка JSON? Если да, это неправильный формат.


{ 546523 = { seats = \"FOUR\"; shape = \"HATCHBACK\"; price = \"6500\"; engine = \"TWO LITRE\"; color = \"ORANGE\"; number = \"36408974\"; }; }

Значением $ basketItems является строка, а не массив. Используйте json_decode http://php.net/manual/en/function.json-decode.php для декодирования строки JSON, а затем вы можете перебрать массив.

$basketItems = $_POST['items']; 

foreach($basketItems as $key => $item) {
print $item['shape'];
}
1 голос
/ 19 января 2012

Ну, данные вашего примера неверны.Но если бы вы вводили JSON, то это было бы что-то вроде:

[ { "seats": "FOUR", "shape": "HATCHBACK", "price": "6500", "engine": "TWO LITRE", "color": "ORANGE", "number": "36408974" } ]

Обратите внимание, что такой же обход применим для фактического массива $ _POST.И это должно быть точно так же, как ваш пример foreach.

Введенный вами ввод не является ни тем, ни другим.Похоже, некоторые магические кавычки мешают JSON, но я не совсем уверен.

В противном случае, прежде чем пытаться что-либо еще, используйте var_dump($_POST);, чтобы увидеть фактическую полученную структуру, прежде чем перебирать ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...