将参数传递给ajax的正确方法是什么

时间:2016-02-10 11:17:59

标签: javascript php jquery ajax

我有一个简单的目录:

<?php foreach ($productArray as $key => $value) { ?>
    <div class="product">
        <form id="cartForm">
            <table border='1' cellspacing='0' cellpading='2' width='300 px' align='center'>
                <tr>
                    <td>ID</td> 
                    <td><?php echo $productArray[$key]["ID"];?></td>
                </tr>
                <tr>
                    <td>kategorija</td>
                    <td><?php echo $productArray[$key]["category"];?></td>
                </tr>
                    <td>kiekis</td>
                    <td><?php echo $productArray[$key]["quantity"];?></td>
                </tr>
                <div>
                    <input type="text" id="inputQuantity_<?php echo $productArray[$key] ["ID"];?>"/>
                    <input type="button" id="add_<?php echo $productArray[$key]["ID"];?>" value="prideti" onClick="cartAction('add','<?php echo $productArray[$key]["ID"];?>')" />

按下此按钮我想将数组参数传递给我的cartAction函数。

function cartAction(action, productID) {
    var stringQuery = "";

    if ($.trim(action) == 'add') {
        stringQuery= 'action=' + action + '&ID=' + productID + '&quantity=' + $("#inputQuantity_" + productID).val();
    }

    jQuery.ajax({
        url: "index.php",
        data: stringQuery,
        type: "POST",
        success: function(data) {
            alert(data);
        }
    });
}

而不是数组参数alert(data)显示整页代码。收集数组数据并发送到javascript函数的最佳方法是什么?

6 个答案:

答案 0 :(得分:0)

          <?php  foreach ($productArray as $key => $value) {   ?>

            <div class="product">
              <form  >
              <table border='1' cellspacing='0' cellpading='2' width='300 px' align='center'>
              <tr>
                <td> ID </td> <td><?=$value["ID"];?> </td>
                </tr>
                <tr>
                <td> kategorija </td> <td><?=$value["category"];?> </td>
                </tr>
                <td> kiekis </td> <td><?=$value["quantity"];?> </td>
              </tr>
            <div>
            <input type="hidden" name="ID" value="<?=$value["ID"];?>"/>
<input type="hidden" name="category" value="<?=$value["category"];?>"/>
            <input type="hidden" name="quantity" value="<?=$value["quantity"];?>"/>
            <input type="submit" class="submit" value="prideti"  />
         </form>
        <?php   } ?>


        <script>
        $(function(){
     $('.submit').click(function(){
                   data = $(this).closest('form').serializeArray();
        jQuery.ajax({
         url:"index.php",
         data:stringQuery,
         type:"POST",
         success: function(data){
             alert(data);
         }
        });
        return false ;
      });
    });
        </script>

答案 1 :(得分:0)

请传递json而不是创建字符串。

stringQuery = {"action":action,"ID":productID,"quantity":$("#inputQuantity_"+productID).val()}

答案 2 :(得分:0)

因为您使用的是字符串查询,看起来您将在foo\footnotemark bar 数组中找到您的数据,而不是$_GET

如果您想使用$_POST,请将数据构建为对象:

$_POST

根据index.php的编写方式,您需要检查$ _POST [&#39; action&#39;]是否在开头设置,如果是,请处理您的验证等以及执行操作( mysql等等)然后在输出整个页面html之前停止执行。

您要输出的任何数据都可以使用php中的function cartAction(action, productID){ if($.trim(action)=='add'){ stringQuery= { 'action': action, 'ID': productID, 'quantity': $("#inputQuantity_"+productID).val() } $.ajax({ url: 'index.php', data: stringQuery, dataType: 'json', //so ajax knows how to populate the response type: 'POST', success: function(data) { alert(data); } }); } } 输出。

此外,您可能希望使用json_encode()而不是{j}中的alert(data),并使用开发人员工具查看其中的内容(F12,然后是控制台标签)

答案 3 :(得分:0)

将此脚本替换为您的脚本。

console.log(data)

答案 4 :(得分:0)

@ Darius92

根据您提出的问题, 而不是数组参数提醒(数据)显示整页代码 ,我相信您假设变量&#39 ; data&#39; alert(data)中的data会引用data:stringQuery行中的data。是这样吗?
如果我的假设是正确的,那你错了!
success: function(data){alert(data); }中的变量url:"index.php",用于处理index.php的响应。这意味着它是您的AJAX文件($_REQUEST)的响应。

您应该在AJAX文件index.php中打印AJAX request数组,以了解哪些信息已发布到您的AJAX handler file, index.php

您的<?php echo "<pre>"; print_r($_REQUEST); echo "</pre>"; ?> 应如下所示:

 @code
        IF %ERRORLEVEL% NEQ 0 GOTO ProcessError    
        @code
        exit /b 0    
        :ProcessError
        @codeprocess error
        exit /b 1

我认为你意识到你写的是什么以及你期待什么!

答案 5 :(得分:0)

你也可以使用json代替字符串,见下文

path/filename/ext(line,col)

在此ajax请求中 contentType 表示您发送请求数据的格式, dataType 表示您希望数据格式化

在这段代码中传递了json这是好方法