4

我绑定到 beforeSend 的 ajax 表单提交:

我的功能如下:

submitStuff : function(e, xhr, settings) {

    settings.data = {
            invitation : {
                emails : me.returnsArrayX(),
                bucket2 : me.returnsArrayY(),
                bucket3 : me.returnsArrayZ()
            }
    }

}

当我像这样手动提交到服务器时,这是有效的:

    $.ajax({
        type: 'POST',
        url: '/myurl',
        dataType: 'json',
        data: {
            invitation : {
                emails : me.returnsArrayX(),
                bucket2 : me.returnsArrayY(),
                bucket3 : me.returnsArrayZ()
            }
        }
    });

但由于我使用的是 Rails UJS,我想使用内置的表单提交器(数据远程)。为什么 settings.data 在上面不起作用?我需要将对象转换为数组或其他东西吗?

谢谢

4

3 回答 3

3

设置processDatafalse,那么您可以简单地使用 中的对象beforeSend

$.ajax("/", {
    beforeSend: function(xhr, settings) {
        settings.data.key2 = "value2";
        settings.data.key3 = {
             more: "values",
             like: "this"
        }; 

        //Encode at end
        settings.data = jQuery.param(settings.data, false);
    },
    data: {
        key: "value"
    },
    processData: false,
    type: "POST"
}​);​
于 2012-08-08T21:12:52.200 回答
1

Try this

submitStuff : function(e, xhr, settings) {

  settings.data += "&serialized=data";

}

similar post: How do I append data to a jquery-ujs post request in Rails?

于 2012-08-07T12:02:34.007 回答
1

为了序列化数据,我将使用jQuery.param(obj)。所以从 pdpMathi 的例子来看,它看起来像这样。

submitStuff : function(e, xhr, settings) {

    data = {
            invitation : {
                emails : me.returnsArrayX(),
                bucket2 : me.returnsArrayY(),
                bucket3 : me.returnsArrayZ()
            }
    }
    settings.data += "&serialized=" + jQuery.param(data)

}

您可以在这里jsFiddle看到上面对一些简单示例数据的作用。这使您可以轻松地处理数据,并且仅在完成后对其进行序列化。

于 2012-08-08T11:58:52.923 回答