.ajax 不会 POST,但会 GET 没有问题

Posted

技术标签:

【中文标题】.ajax 不会 POST,但会 GET 没有问题【英文标题】:.ajax will not POST, but will GET with no problem 【发布时间】:2010-12-21 23:02:36 【问题描述】:

我正在尝试使用 jQuery 的 .ajax() 函数提交表单。看起来它应该很简单,但由于某种原因,我无法让 type: "POST" 正常工作。使用 type: "GET" 没有问题,但 "POST" 似乎实际上并没有向我接受的 php 脚本发布任何内容。当我执行 print_r($_POST) 时,它会返回一个空数组。我尝试在表单输入上同时使用输入类型“提交”和“按钮”,但它似乎没有改变任何东西。任何想法为什么它不起作用?

Ps - 此页面上有超过 1 个表单。

编辑澄清 如果我在使用 type:"GET" 时执行 print_r($_GET),它会打印出所有正确的数据,但如果我将 .ajax 选项更改为 type:"POST" 并尝试 print_r($_POST) 它会显示一个没有内容的空白数组。

JS代码:

var dataString = 'reply_text='+ 测试 + '&post_id=' + post_id ; $.ajax( 类型:“发布”, 网址:“process.php”, 数据:数据字符串, 缓存:假 ); 返回假;

表格代码:

【问题讨论】:

你的ajax请求中使用的dataString变量从何而来? 我正要问同样的问题。 嗨 Darin,dataString 直接出现在 .ajax 请求之前: var dataString = 'reply_text='+ text + '&post_id='+ post_id;而且我知道 dataString 工作正常,因为当我使用 GET 时它工作正常。我应该使用不同的字符串格式吗? ps - 我已将 dataString 添加到上述问题中 【参考方案1】:

这可能会更好:

var text = ...
var post_id = ...

$.ajax(
    type: 'POST',
    url: 'process.php',
    data:  reply_text: text, post_id: post_id 
);

【讨论】:

嗨达林,我刚刚尝试过,但仍然无法用于 POST(尽管它仍然适用于 GET)。 看FireBug的时候,看到发送的参数了吗?我开始怀疑您的服务器端脚本而不是 javascript 有问题。 哦,很棒的小费。我检查了 FireBug,它为我的 POST 提供了 302。原因是我使用 .htaccess 来重写我的 URL,最后没有“.php”。在我的js中,当我只需要将它发送到“process”(没有.php)时,我告诉ajax去“process.php”。我不敢相信修好了!非常感谢:D @justinl 很棒的提示,这正是我刚刚在做的事情,htaccess url 重写。谢谢!【参考方案2】:

您如何连接您的活动?你确定它是被触发的吗?尝试在其中放置警报或其他内容,以确保?

您的dataString 是什么样的? type: 'POST' 足以使 ajax 回调成为帖子,因此可能是您的数据以错误的方式传递。

【讨论】:

我已更新原始问题以回答您的问题。谢谢【参考方案3】:

如果您想使用 AJAX 发布表单,我建议您使用 jQuery Form Plugin,它可以很好地且不显眼。

【讨论】:

【参考方案4】:
var formData = 
    'test': $('input[name=text]').val(),
    'post_id': $('input[name=post_id]').val()
;

// process the form
$.ajax(
    type: 'POST', // define the type of HTTP verb we want to use (POST for our form)
    url: 'process.php', // the url where we want to POST
    data: formData, // our data object
    dataType: 'html', // what type of data do we expect back from the server
    encode: true,
    success: function(updatedTable) 
        //alert(updatedTable);
        $('div#tableHolder').html(updatedTable);
    
)

【讨论】:

以上是关于.ajax 不会 POST,但会 GET 没有问题的主要内容,如果未能解决你的问题,请参考以下文章

jQuery .ajax() POST 请求抛出 405(不允许的方法)但 GET 不会

Ajax中get和post使用问题

ajax,get和post的区别

解析ajax请求post和get的区别

AJAX get() 和 post() 方法

Ajax 中的 GET 与 POST