2013-08-09 4 views
1

У меня есть простой сценарий ajax (jquery version) и очень короткая функция php, и они отлично работают без проблем. Когда я отправляю значение из ввода формы, ajax будет работать для отправки и получения результата от сценария php, в этом случае для получения общей суммы заказа книги. Сценарий и HTML разделе Ajax являются следующие:Получить переменную Ajax из петель PHP foreach

 <script language="JavaScript"> 
    $(document).ready(function() { 
    $("form").mouseout(function() { 
     // get field value 

     var qtyVal = $('#qty').val(); 
     // use HTTP GET get ajax 
     $.ajax({ 
     type: 'GET', 
     url: 'getSunBody.php', 
     data: { qty : qtyVal, 
       }, 
     success: function(data) { 
      //get xml value 
        $('#result').html($(data).find('qty').text()); 
      $('#result1').html($(data).find('caution').text()); 

     } 
     });  
     return false; 
    }); 
}); 
</script> 


<body> 
Total price:<div id="result" class="box" style="height=350px;"></div><div id="result1" class="box" style="height=350px;"></div> 
<form> 
    <p> 
    <label>quantity: </label> 
    <input type="text" id="qty" name="qty"/> 
    <br/> 
     <input type="submit" value="submit"> 
    total price:</p> 
    <p>&nbsp;</p> 
</form> 

И следующий скрипт служит XML также отлично работает с выше запроса Ajax:

<?php 
// XML document 
header("Content-Type: text/xml"); 
header("Content-Type:text/html; charset=utf-8"); 
// get field values 
$qty = (isset($_POST["qty"])) ? $_POST["qty"] : $_GET["qty"]; 

echo "<?xml version=\"1.0\" ?>"; 

echo "<datetime>"; 
echo "<qty>" . $qty*100 . "</qty>"; 

$total=$qty*100; 
if ($total==0) 
    echo "<caution>"."please input number!"."</caution>"; 
    else if ($total<=500) 
    echo "<caution>"."you shoud buy more!"."</caution>"; 
    echo ""; 

echo "</datetime>"; 

?> 

Однако, когда я объединить выше скриптов с моими корзинами foreach корзины, он не работает, и сценарий ajax не смог получить переменные из области ввода формы. Я не знаю, является ли это проблемой с переменной областью (глобальными или локальными)? или что-нибудь еще?

Ниже приведен общий сценарий, я хотел бы фиксировали:

<script language="JavaScript"> 
$(document).ready(function() { 
    $("form").mouseout(function() { 
     // get value from the form 

     var qtyVal = $('#qty').val(); 
     // get 
     $.ajax({ 
     type: 'GET', 
     url: 'getSunBody.php', 
     data: { qty : qtyVal, 
       }, 
     success: function(data) { 
      // get XML value 
      $('#result').html($(data).find('qty').text()); 
      $('#result1').html($(data).find('caution').text()); 

     } 
     });  
     return false; 
    }); 
}); 
</script> 
</head> 

<body> 
<table border="1" align="center"> 
<tr> 
    <th>no</th> 
    <th>name</th> 
    <th>price</th> 
    <th>qty</th> 
    <th>update</th> 
</tr> 
<?php 
foreach($_SESSION["psn"] as $i => $data){ 
?> 
<form action="sessionCartUpdate.php"> 
<input type="hidden" name="psn" value="<?php echo $_SESSION["psn"][$i];?>"> 
<tr> 
    <td><?php echo $_SESSION["psn"][$i];?></td> 
    <td><?php echo $_SESSION["pname"][$i];?></td> 
    <td><?php echo $_SESSION["price"][$i];?></td> 
    <td><input type="text" id="qty" name="qty" value="<?php echo $_SESSION["qty"][$i];?>"></td> 
    <input type="submit" name="qty" 
    <td><input type="submit" name="btnUpdate" value="update" /> 
     <input type="submit" name="btnDelete" value="delete" /> 
     </td> 
</tr> 
</form> 
<?php 
} 
?> 
<tr><td colsan="5">total amount:<div id="result" class="box" style="height=350px;"></div><div id="result1" class="box" style="height=350px;"></div></td></td> 
</table> 
<p><a href="sessionProdList.php">continue to shop</a> 
<p><a href="sessionCartToDb.php">Put your order</a> 
</body> 
</html> 

Я был бы очень признателен, если кто-нибудь может предложить доброе или возможное предложение или совет? Моя цель состоит в том, чтобы поместить другое число (переменные) в «область ввода» (имя или идентификатор как «qty») через использование ajax для получения общей суммы цены и показать результат в поле div (id = результат "или" результат1 ").

+3

идентификатор должен быть уникальным 'ID =«кол-во»' вы можете использовать класс также –

+0

большое спасибо за это предложение! –

ответ

0

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

Другое дело, я заметил, что вы сделали отдельный элемент формы Еогеасп в корзине должна быть одна форма, имеющая несколько таких полей, а также удалить эту строку <input type="submit" name="qty" это doesent имеет смысл

<form action="sessionCartUpdate.php"> 
<?php 
foreach($_SESSION["psn"] as $i => $data){ 
?> 

<input type="hidden" name="psn" value="<?php echo $_SESSION["psn"][$i];?>"> 
<tr> 
    <td><?php echo $_SESSION["psn"][$i];?></td> 
    <td><?php echo $_SESSION["pname"][$i];?></td> 
    <td><?php echo $_SESSION["price"][$i];?></td> 
    <td><input type="text" class="qty" name="qty[]" value="<?php echo $_SESSION["qty"][$i];?>"></td> 

    <td><input type="submit" name="btnUpdate" value="update" /> 
     <input type="submit" name="btnDelete" value="delete" /> 
     </td> 
</tr> 

<?php 
} 
?> 
</form> 

<script language="JavaScript"> 
$(document).ready(function() { 
    $("form").mouseout(function() { 
var qtyVal =0; 
$(".qty").each(function() { 
    qtyVal =qtyVal + parseInt($(this).val()); 
});  
     // get 
     $.ajax({ 
     type: 'GET', 
     url: 'getSunBody.php', 
     data: { qty : qtyVal, 
       }, 
     success: function(data) { 
      // get XML value 
      $('#result').html($(data).find('qty').text()); 
      $('#result1').html($(data).find('caution').text()); 

     } 
     });  
     return false; 
    }); 
}); 
</script> 
+0

Ничего себе, Удивительно! Это мощное и надежное решение! С вашей помощью моя корзина теперь работает без проблем! –

+0

Еще раз большое спасибо за ваши усилия и отличное решение! –

+0

Мне хорошо, что это помогло вам –

0
// get field values 
$qty = (isset($_POST["qty"])) ? $_POST["qty"] : $_GET["qty"]; 

Вместо того, чтобы использовать как $ _GET и $ _POST, вы можете использовать $ _REQUEST, который будет давать данные либо из POST или GET.

+0

Большое спасибо за этот быстрый ответ! –

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