Отправка формы более одного раза - PullRequest
0 голосов
/ 02 октября 2009

Я пытаюсь, чтобы форум отправлялся более одного раза, когда пользователь нажимает кнопку отправки. Зачем? Я пытаюсь добавить в корзину покупок более одного то же. Программное обеспечение корзины покупок, которое я использую, не поддерживает добавление более одного продукта за раз, и я не хочу редактировать основной код. У скрытого форума будут идентификаторы продуктов, такие как «1,2,3». Тогда мне понадобится JavaScript, чтобы разделить значения и опубликовать каждое из них, используя AJAX, в корзину. Я не очень хороший JavaScript, но я кодировал то, что, по моему мнению, должно работать, но он просто дает мне предупреждение: «Возникла проблема с запросом». дважды. Я не вижу, что с ним не так, любая помощь и предложения приветствуются! Вот код:

JS

<script type="text/javascript">
function testResults (form) {

var product_id = form.product_id.value;
var quantity = form.quantity.value;
var brokenstring=product_id.split(",");

for ( var i in brokenstring )
{

   var http_request = false;
   function makePOSTRequest(url, parameters) {
      http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         if (http_request.overrideMimeType) {
            // set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }

      http_request.onreadystatechange = alertContents;
      http_request.open('POST', url, true);
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http_request.setRequestHeader("Content-length", parameters.length);
      http_request.setRequestHeader("Connection", "close");
      http_request.send(parameters);
   }

   function alertContents() {
      if (http_request.readyState == 4) {
         if (http_request.status == 200) {
            //alert(http_request.responseText);
            result = http_request.responseText;
            document.getElementById('myspan').innerHTML = result;            
         } else {
            alert('There was a problem with the request.');
         }
      }
   }


      var poststr = "product_id=" + encodeURI( brokenstring[i] ) +
                    "&quantity=" + encodeURI( quantity );
      makePOSTRequest('post.php', poststr);



}
}
</script>

HTML

<form action="javascript:testResults(document.getElementById('myform'));" name="myform" id="myform">
<input type="text" name="product_id" id="product_id" />
<input type="hidden" name="quantity" id="quantity" value="1" />
<br />
<input type="submit" name="button" value="Submit" />
</form>


<span name="myspan" id="myspan"></span>

post.php

<?php
print_r($_POST);
?>

Ответы [ 2 ]

2 голосов
/ 02 октября 2009

Если вы хотите добавить два элемента в корзину, разве вы не должны делать два сообщения с одним и тем же элементом? Я могу видеть только один пост на предмет. Вы не учитываете количество. Но это не проблема. В этом случае это только логическая ошибка.

Что касается javascript, я бы порекомендовал вам использовать jQuery для обработки ajax, потому что это сделает вашу жизнь НАСТОЛЬКО проще, чем обычный javascript, который может работать не во всех браузерах.

Это ссылка, связанная с методом POST jQuery: http://docs.jquery.com/Post

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

0 голосов
/ 02 октября 2009

Недопустимо, чтобы вся логика программирования публиковала форму несколько раз вместо более сложной формы. Из того, что я вижу или понимаю из вашего кода, вы пытаетесь перебрать вашу разделенную (разбитую) строку. Ваш цикл не построен, где и как он должен быть. В любом случае, будь я на вашем месте, я бы рассмотрел миграцию в другую бесплатную корзину или возможность написать ее самостоятельно. Из того, что я вижу, вы сможете сделать это с небольшой помощью отсюда.

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