Как бы я, если это возможно, установить массив PHP из вызова AJAX? - PullRequest
3 голосов
/ 22 июня 2011

Хорошо, поэтому я пытаюсь извлечь данные из ajax-запроса и, возможно, если возможно, установить массив php ... Я даже не уверен, возможно ли это, учитывая, что один - на стороне клиента, а другой - на стороне сервера ... так что здесьмой код

на html-странице

<?php foreach ($products as $product): ?>
  <li>
  <h3><span><?php print $product["price"]; ?></span> (4) <?php print $product["name"]; ?> </h3>
    <div class="container">
 <table  width="100%" border="0" cellspacing="0" cellpadding="0">
 <tr>
 <td valign="top" width="42"><span class="qty"><?php print $product["quanitity"]; ?></span></td>
 <td width="180">
 ........  

, и я хочу просмотреть все продукты в этом массиве, но для получения продуктов мне нужно сделать вызов ajax, подобный этому

$.ajax({
    type: 'post',
    url: "/shop_systems/index.php?route=module/cart/get_all_products",          
    dataType: 'json',
  data: {current : null, previous : these_ids, quantity : 1, multiple : true},
    success: function (data) {

Я думал, если бы был простой способ сделать это ... Я думал, что одним из решений было бы написать html в части success вызова ajax, но у меня было бы многоиз append утверждений ... любой более чистый способ был бы оценен

Ответы [ 5 ]

3 голосов
/ 22 июня 2011

Использовать cURL с PHP

PS: я рекомендую не смешивать ваш HTML и PHP, как вы. Это бесполезно трудно отлаживать и поддерживать.

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

$post_data = array(
    'current' => 'null',
    'previous' => 'null',
    'quantity' => '1',
    'multiple' => 'true'
);

// Init curl thing
$ch = curl_init();

// Setup curl options
curl_setopt_array($ch, array(
    CURLOPT_URL => '/shop_systems/index.php?route=module/cart/get_all_products',
    CURLOPT_POST => TRUE,
    CURLOPT_RETURNTRANSFER => TRUE, // Return content as string
    CURLOPT_FOLLOWLOCATION => TRUE, // Follow redirects
    CURLOPT_AUTOREFERER => TRUE, // Set referer field on redirect
    CURLOPT_VERBOSE => TRUE,
    CURLOPT_COOKIEJAR => '/tmp/curl_php_cookies',
    CURLOPT_COOKIEFILE => '/tmp/curl_php_cookies',
    CURLOPT_STDERR => fopen('/tmp/curl_php_log', 'w'),
    CURLOPT_POSTFIELDS => $post_data
));

// Excecute request
$product = json_decode(curl_exec($ch));

$html = '';

foreach ($products as $product)
{
    $html .= <<< HTML
    <li>
        <h3>
            <span>{$product["price"]}</span> 
            (4)  {$product["name"]}
        </h3>
        <div class="container">
            <table  width="100%" border="0" cellspacing="0" cellpadding="0">
     <tr>
     <td valign="top" width="42"><span class="qty">{$product["quanitity"]}</span></td>
     <td width="180">
HTML;
}

?>
0 голосов
/ 22 июня 2011

любой URL в следующей форме автоматически создаст массив php.

http://example.com/foo.php?a[]=hello&a[]=world

0 голосов
/ 22 июня 2011

Вопрос вроде неясен.Но вот мой лучший снимок:

Вместо того, чтобы делать foreach в php, сделайте это в javascript в success: function (data) {} function, как вы предложили.

Вы бы сделали что-то вроде:

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

var container_node = $('#your_container_id');
 $.each(data, function() { this['price'] ... document.createElement ... container_node.append ... do what you did in php but manipulating the DOM ... }

Надеюсь, что помогает.

0 голосов
/ 22 июня 2011

Есть ли возможность сделать вызов при загрузке страницы и использовать PHP для вывода данных на стороне сервера при создании страницы? Он появляется из URL AJAX, который является жестко закодированным / статическим, а не генерируется динамически в результате обработчика события. Может быть, запрос cURL в начале? Вероятно, это будет более эффективно, чем изменение DOM на стороне клиента.

0 голосов
/ 22 июня 2011

Переменная php $products устанавливается только при загрузке / обратной передаче страницы (как они это называют в php). Вы правы в своей первоначальной оценке, что использование append в обратном вызове success было одним из способов сделать это.

В качестве альтернативы вы можете использовать что-то вроде jquery templates для немного более чистого подхода.

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