在$ .ajax请求中传递数据会返回一个空数组。怎么了?

时间:2013-03-28 08:39:03

标签: jquery ajax

我正在努力解决这个问题。

我正在尝试使用$ .ajax将元素数据传递到我的php文件,它总是返回空。

这是我的代码:

    strJson = '{'
    $.each(this_side.data(), function(i, v) {
        strJson += i + ":'" + v + "',";
    });
    strJson += term_id + ":'" + term_id + "',";
    strJson += new_page_num + ":'" + new_page_num + "'";
    strJson += '}';

    alert(strJson); // this works

    $.ajax({
        url: 'my url here',
        type: 'post',
        data: strJson,
        success: function(data){
            alert(data);
        }
    });

$ _POST的Outpot是一个空数组。它不起作用。

我在这里缺少的是什么?

5 个答案:

答案 0 :(得分:1)

不要打扰dataTypecontentType,jQuery应该自己解决这个问题。 this_side.data()返回什么?如果它是一个数组,那么i循环中的$.each变量就是一个数字,而你的JSON格式错误。试试

$.each(this_side.data(), function(i, v) {
    strJson += "'" + i + "':'" + v + "',";
});

然后你还应该发布一个JSON对象,而不是一个JSON字符串:

 $.ajax({
    data : JSON.parse( strJson ),
    ...
 })

this_side.data()返回一个对象并且键具有' - '等“特殊”字符时,也会考虑到这一点。

如果this_side.data()返回一个对象,则以下方法更容易:

$.ajax({
    url: 'my url here',
    type: 'post',
    data: $.extend( 
            this_side.data(),
            {'term_id': term_id, 'new_page_num' : new_page_num }
          ),
    success: function(data){
        alert(data);
    }
});

答案 1 :(得分:0)

由于lordVlad评论更新了答案:

strJson = '{'
    $.each(this_side.data(), function(i, v) {
        strJson += i + ":'" + v + "',";
    });
    strJson += "'"+ i + "':'" + v + "',";
    strJson += new_page_num + ":'" + new_page_num + "'";
    strJson += '}';

尝试将dataType和'contentType'添加到您的代码

$.ajax({
        url: 'my url here',
        type: 'post',
        data : JSON.parse(strJson),
        dataType: 'json',
        success: function(data){
            alert(data);
        },
        contentType: "application/json; charset=utf-8"
    });

您也可以查看官方文档:http://api.jquery.com/jQuery.post/

答案 2 :(得分:0)

试试这个:

$.ajax({
    url: 'my url here',
    type: 'POST',
    dataType: 'json',
    contentType: "application/json; charset=utf-8",
    data: { param: strJson },
    success: function(data){
        alert(data);
    }
});

答案 3 :(得分:0)

尝试添加dataType:"json"

$.ajax({
    url: 'my url here',
    type: 'post',
    data: $.parseJSON(strJson),
    dataType: "json",
    success: function(data){
        alert(data);
    }
});

并在发送之前用strJson解析$.parseJSON()

答案 4 :(得分:0)

在data参数中,您将以json格式发送字符串。

尝试按以下格式发送数据。

strJson='name=Will&address=florida';

如果有效,请告诉我。