不止一次提交表格

时间:2009-10-02 15:27:28

标签: javascript ajax post

当用户点击提交按钮时,我尝试让论坛提交一次以上。为什么?我试着在购物车中添加一个以上的idem,我使用的购物车软件不支持一次添加多个产品,我不想编辑核心代码。隐藏的论坛会有像'1,2,3'这样的产品ID,然后我需要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 个答案:

答案 0 :(得分:2)

如果您要在购物车中添加两个商品,那么您是否应该使用相同的商品进行两个帖子?我可以在那里看到每个项目一个帖子。您没有考虑数量。但这不是问题。在这种情况下,这只是一个逻辑错误。

对于javascript方面,我建议你使用jQuery来处理ajax的东西,因为它会使你的生活方式比普通的javascript更容易,这可能不适用于所有浏览器。

这是与jQuery的POST方法相关的链接:http://docs.jquery.com/Post

希望有所帮助

答案 1 :(得分:0)

对于所有编程逻辑来说,多次发布表单而不是使用更复杂的表单。从我可以从您的代码中看到或理解的内容,您试图遍历您的splitted(brokenstring)字符串。你的循环不是在它应该的地方和方式构建的。无论如何,如果我是你,我会考虑迁移到另一个免费购物车o可能自己写一个。从我看到你可以通过这里的一些帮助这样做。