如何使用jquery进行POST并使用JSON捕获回复

时间:2013-05-01 18:13:09

标签: php javascript jquery

我正在使用此代码:

function save() {
    // submit the dataform
    $.post(document.dataform.action, 
        $("#dataform").serialize(),
        function(reply) {
           //handle reply here
    });
}

这会将正确的数据发送到服务器,但它会到达$ _GET。当我改变服务器代码以匹配时,我得到预期的答复。 dataform.action上有一部分查询。我期望以$ _GET的形式到达。

如何实际让POST从表单发送数据,以便它到达$ _POST,从而避免GET的大小限制?

我正在使用Firefox,JQuery 9和PHP 5.4.3进行测试

谢谢,伊恩

3 个答案:

答案 0 :(得分:0)

$ _ GET从查询字符串中获取参数,以便$ _POST和$ _GET执行此操作:

var action       = document.dataform.action;
var get_variable = "var1=v1&var2=v2..."; 
action = action+"?"+get_variable;
$.post(action, 
        $("#dataform").serialize(),
        function(reply) {
           //handle reply here
    });

答案 1 :(得分:0)

function save() {
    // submit the dataform
    $.post(document.dataform.action, 
        { data: $("#dataform").serializeArray() })
    .done(function(reply) {
           //handle reply here
    });
}

然后json_decode($ _ POST ['data']);用PHP

答案 2 :(得分:0)

破解了!正确的方法是

function save() {
    // submit the dataform
    $.ajax({
    url: document.dataform.action,
    data: new FormData(document.dataform),
    cache: false,
    contentType: false,
    processData: false,
    type: 'POST',
    success: function(reply){
        if (reply.action) fetch('/content.php',reply.action);
        if (reply.content) document.getElementById('content').innerHTML=reply.content;
        if (reply.menu) document.getElementById('menu').innerHTML=reply.menu;
        if (reply.status) document.getElementById('status').innerHTML=reply.status;
        calcSize();
        }
    });
}

但这仅适用于支持FormData的浏览器 - Chrome 7 +,FF4.0 +,IE 10 +,Opera 12+和Safari 5+
好的,我的用例;) 感谢大家的投入。