使用jQuery AJAX发送多个数据参数

55

我正在发送一个ajax请求到一个php文件,如下所示:

function checkDB(code, userid)
{

  $.ajax({
  type: "POST",
  url: "<?php bloginfo('template_url'); ?>/profile/check_code.php",
  data: 'code='+code+'userid='+userid,
  datatype: "html",
  success: function(result){

       if(result == 0)
        {
            $('#success').html( code + ' has been redeemed!');
            // alert('success');//testing purposes
        }
        else if(result == 2)
        {
            $('#err').html(  code + ' already exists and has already been redeemed....');
            //alert('fail');//testing purposes
        }else if(result == 1){
            $('#err').html(  code + ' redeem code doesnt exist');      
        }

        alert(result);      
      }
  })

}

这是在提交表单时调用函数的方法,像这样:

<form method="post" class="sc_ajaxxx" id="sc_add_voucherx" name="sc_ajax"  
     onsubmit="checkDB(document.sc_ajax.sc_voucher_code.value, <?php echo $user_id ?>); return false;">
</form>
问题在于用户id的php变量没有通过ajax发送到check_code.php页面,或者我似乎无法将id回显到页面上。
这是传递多个值到服务器端页面的正确方式吗?如果没有用户ID传递,仅传递代码也可以正常工作。
谢谢大家 :)
7个回答

134

以下是POST数据应该格式化的方式:

key1=value1&key2=value2&key3=value3
在您的情况下(请注意&作为分隔符):
'code=' + code + '&userid=' + userid

但是如果你将数据指定为对象,jQuery会为你完成这个操作:

data: { code: code, userid: userid }

1
好的,谢谢。我该如何将其指定为一个对象?这应该是数据类型:json吗? - JamesG
1
不需要更改您的“dataType” - 这是向jQuery提示它应该如何解释您的响应。它发送的数据默认情况下被序列化为post数据,例如code=17&userid=42。您只需要将数据字符串更改为我上面写的内容,它就可以工作了。 - Linus Thiel
1
通常情况下,您不需要指定“dataType”,jQuery会根据响应头等自动判断。在无法判断的情况下,如果您期望接收JSON数据,则需要指定。请参阅jQuery.ajax文档 - Linus Thiel
我喜欢对象方法,因为它更易于阅读,看起来更整洁。 - a coder
@LinusGustavLarssonThiel,除了您的答案,还有其他方法吗?在我的情况下,我从文本区域获取值,但问题是,它没有获取到整个内容,因为如果这些值包含字符:&,',",=。现在,我已经尝试在保存时替换它们,但我认为这仍然不够高效。我使用的其他特殊字符可能会出现相同的问题。希望您能帮助我,谢谢。 - wolfQueen
显示剩余6条评论

15

您应该像这样设置您的数据

data: 'code='+code+'&userid='+userid

4

你可以尝试这个:

data: 'code='+code+'&userid='+userid,

代替
data: 'code='+code+'userid='+userid,

3
通常按照以下方式发送您的数据可以提高效率:

通常这样发送您的数据有助于提高效率:

data: { code: code, userid: userid }

最重要的是不要忘记验证您发送的变量名称是否与服务器端相同。


1
Linus Gustav Larsson Thiel的回答如下:我使用了以下的 &.ajax(),当按钮被点击时触发,它很好用。我可以传递天、月和年参数。
$('#convertbtn').on('click',function(){
ageddajax = $("#agedd").val();
agedmmajax = $("#agemm").val();
ageyyyyajax = $("#ageyyyy").val();
    if(ageddajax > 0 && agemmajax > 0 && ageyyyyajax >0){
    $.ajax({
        type:'POST',
        url:'ajaxDataAge.php',
        data:'agedd_id='+ageddajax +'&agemm_id='+agemmajax +'&ageyyyy_id='+ageyyyyajax,
            success:function(html){
            $('#cydivage').html(html);
            }
        });
    }   
});

0

尝试这段代码...它对我有效...

<script type='text/javascript'>
$(document).ready(function(){
  $(".star").click(function(){
   var rate_value1= $(this).index(".star")+1;
    $.ajax({
    type: "POST",
    dataType: "json",
    url:  "<?php echo(rootpath()) ?>/vote.php",

data: { product_id: '<?php echo($product_id_to_permalink) ?>' , rate_value: rate_value1 }

        });
      });
    });
</script>       

0
 Try this code... 
    <script>
     function quote_ajax_table(){
       var doc_name = '<?php echo $test; ?>';
       var doc_no = '<?php echo $doc_no; ?>';

$.get('quote_ajax_table.php?doc_no='+doc_no+'&doc_name='+doc_name,function(data) {
   $('.dyna').html(data);
 });
}
</script>

//in html code 
  <div class="dyna"></div>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接