使用参数

时间:2015-12-29 08:28:03

标签: php jquery ajax

我正在尝试使用参数中的数组进行Ajax查询。这是一个例子:

var info = [ter,ter,ter];

$('body').on('click','#upload', function(){
    $.ajax({
        url:'/app_dev.php/uploader_photos',
        data:{
            links : info,
        },
        dataType : 'json',
        beforeSend : function(){
            $('#upload_photo').empty();
            $('#upload_photo').append('<i class="fa fa-refresh fa-spin"></i> Loading');
        },
        success : function(data){
            $('#upload_photo').empty();
            $('#upload_photo').append('<i class="fa fa-thumbs-o-up"></i> OK');
        }
    });
});

问题是我的网址以这种方式编码:

/upload?links%5B%5D=ter&lioks%5B%5D=ter&lioks%5B%5D=ter

我需要知道如何以这种方式编码:

/upload?links=[ter,ter,ter]

感谢您的帮助!

3 个答案:

答案 0 :(得分:2)

实际上这应该不是问题。由于您没有设置Content-Type,因此默认情况下jQuery使用formurlencoded查询字符串,因此它会按照这种方式对值进行编码,并将其作为form data而不是Request Payload发送。

你可以这样:

if(isset($_GET['links'])){
  echo $_GET['links'];
}

来自文档:

  

contentType(默认值:'application / x-www-form-urlencoded; charset = UTF-8')    类型:布尔值或字符串
  将数据发送到服务器时,请使用此内容类型。默认为“application / x-www-form-urlencoded; charset = UTF-8”,这在大多数情况下都适用。如果您明确地将内容类型传递给$ .ajax(),那么它总是被发送到服务器(即使没有数据发送)。从jQuery 1.6开始,你可以传递false来告诉jQuery不要设置任何内容类型标题。注意:W3C XMLHttpRequest规范规定字符集始终为UTF-8;指定另一个字符集不会强制浏览器更改编码。注意:对于跨域请求,将内容类型设置为application / x-www-form-urlencoded,multipart / form-data或text / plain以外的任何内容将触发浏览器向服务器发送预检OPTIONS请求。

答案 1 :(得分:2)

将数组字符串化为json:

info = JSON.stringify(info);

在你的php中:

$info = json_decode($_POST['links']);

答案 2 :(得分:1)

这会将本机JavaScript对象转换为JSON字符串:

JSON.stringify(yourString);

所以,在你的代码中:

links : JSON.stringify(info),