草庐IT

php - AJAX,GET ok,POST 不行

coder 2024-04-07 原文

Ajax GET 请求工作正常。但我必须使用 POST,因为我希望发送大量数据,对于 GET 来说太多了。

环境:Apache 2、Debian 9(从头开始)、jQuery 3.2.1,没什么特别的。

我将我的问题简化为这段代码:

客户

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="de">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <title>Ajaxtest</title>
    <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
</head>
<body>
    <script language="JavaScript">
    <!--
    $.ajax({
        url: 'ajaxtest2.php',
        dataType: 'json',
        contentType: 'application/json; charset=utf-8',
        type: 'POST',
        data: {testdata: 'here I am'},
        success: function (resp) {
            console.log(resp);
        },
    });
    -->
    </script>
</body>
</html>

服务器

<?php
ini_set('error_reporting', E_ERROR);
header('Content-type: application/json'); 
header('HTTP/1.1 200 OK');
print json_encode(
    array(
        'method'=>$_SERVER['REQUEST_METHOD'],
        'get'=>$_GET['testdata'],
        'post'=>$_POST['testdata'])
    );
exit();
?>

当通过 GET 发送 ajax 调用时,我只更改

type: 'POST'

type: 'GET'

这在控制台上给了我这个结果:

{method: "GET", get: "here I am", post: null}

这是你所期望的。

但是当通过 POST 调用时我得到:

{method: "POST", get: null, post: null}

服务器理解 POST 请求但不传递任何值。

我尝试了一些不同的方法来包含目标 url,结果相同

url: 'ajaxtest2.php'
url: './ajaxtest2.php'
url: './ajaxtest2.php/'

它们都没有区别:$_POST 保持为空。

我还在服务器上记录了 get_defined_vars(),但是 $_POST 保持为空并且在转储变量的任何地方都没有“我在这里”的痕迹。

没有 .htaccess 与 url 重写等混合。

我还能做什么?

最佳答案

我的评论的长答案是:

您尝试使用以下 contentType 将数据发送到服务器:

application/json; charset=utf-8

代替发送 POST 数据的默认和规范:

application/x-www-form-urlencoded; charset=UTF-8

在服务器端,它没有将 contentType 作为表单发布,而是作为 application/json。这意味着没有数据放入 $_POST 变量供 php 使用。

GET 是另一回事,因为数据位于 URL 中,而不是正文中。

ajax 调用的编码类型应始终为 utf-8,因此这也不是问题所在。

您通常不应该希望将 json 数据发送到服务器那样。仅当您将数据发送到需要在接受时解析的原始 json 数据的应用程序时,它才适用。对于 PHP 服务器,它需要“表单数据”(否则您需要阅读 php://input,请参阅下面底部的引用 url)。

希望这有助于消除混淆。

更多信息: http://api.jquery.com/jquery.ajax/ (内容类型信息) https://forum.jquery.com/topic/ajax-with-contenttype-application-json (最后的帖子很有帮助)

关于php - AJAX,GET ok,POST 不行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47393616/

有关php - AJAX,GET ok,POST 不行的更多相关文章

  1. ruby - 如何模拟 Net::HTTP::Post? - 2

    是的,我知道最好使用webmock,但我想知道如何在RSpec中模拟此方法:defmethod_to_testurl=URI.parseurireq=Net::HTTP::Post.newurl.pathres=Net::HTTP.start(url.host,url.port)do|http|http.requestreq,foo:1endresend这是RSpec:let(:uri){'http://example.com'}specify'HTTPcall'dohttp=mock:httpNet::HTTP.stub!(:start).and_yieldhttphttp.shou

  2. ruby-on-rails - rails : How to make a form post to another controller action - 2

    我知道您通常应该在Rails中使用新建/创建和编辑/更新之间的链接,但我有一个情况需要其他东西。无论如何我可以实现同样的连接吗?我有一个模型表单,我希望它发布数据(类似于新View如何发布到创建操作)。这是我的表格prohibitedthisjobfrombeingsaved: 最佳答案 使用:url选项。=form_for@job,:url=>company_path,:html=>{:method=>:post/:put} 关于ruby-on-rails-rails:Howtomak

  3. ruby - 有人可以帮助解释类创建的 post_initialize 回调吗 (Sandi Metz) - 2

    我正在阅读SandiMetz的POODR,并且遇到了一个我不太了解的编码原则。这是代码:classBicycleattr_reader:size,:chain,:tire_sizedefinitialize(args={})@size=args[:size]||1@chain=args[:chain]||2@tire_size=args[:tire_size]||3post_initialize(args)endendclassMountainBike此代码将为其各自的属性输出1,2,3,4,5。我不明白的是查找方法。当一辆山地自行车被实例化时,因为它没有自己的initialize方法

  4. jquery - 我的 jquery AJAX POST 请求无需发送 Authenticity Token (Rails) - 2

    rails中是否有任何规定允许站点的所有AJAXPOST请求在没有authenticity_token的情况下通过?我有一个调用Controller方法的JqueryPOSTajax调用,但我没有在其中放置任何真实性代码,但调用成功。我的ApplicationController确实有'request_forgery_protection'并且我已经改变了config.action_controller.consider_all_requests_local在我的environments/development.rb中为false我还搜索了我的代码以确保我没有重载ajaxSend来发送

  5. ruby - 我如何添加二进制数据来遏制 POST - 2

    我正在尝试使用Curbgem执行以下POST以解析云curl-XPOST\-H"X-Parse-Application-Id:PARSE_APP_ID"\-H"X-Parse-REST-API-Key:PARSE_API_KEY"\-H"Content-Type:image/jpeg"\--data-binary'@myPicture.jpg'\https://api.parse.com/1/files/pic.jpg用这个:curl=Curl::Easy.new("https://api.parse.com/1/files/lion.jpg")curl.multipart_form_

  6. jquery - 如何将 AJAX 变量从 jQuery 传递到他们的 Controller ? - 2

    我有一个电子邮件表格。但是我正在制作一个测试电子邮件表单,用户可以在其中添加一个唯一的电子邮件,并让电子邮件测试将其发送到该特定电子邮件。为了简单起见,我决定让测试电子邮件通过ajax执行,并将整个内容粘贴到另一个电子邮件表单中。我不知道如何将变量从我的HAML发送到我的Controllernew.html.haml-form_tagadmin_email_blast_pathdoSubject%br=text_field_tag'subject',:class=>"mass_email_subject"%brBody%br=text_area_tag'message','',:nam

  7. ruby-on-rails - 使用 javascript 更改数据方法不会更改 ajax 调用用户的什么方法? - 2

    我遇到了一个非常奇怪的问题,我很难解决。在我看来,我有一个与data-remote="true"和data-method="delete"的链接。当我单击该链接时,我可以看到对我的Rails服务器的DELETE请求。返回的JS代码会更改此链接的属性,其中包括href和data-method。再次单击此链接后,我的服务器收到了对新href的请求,但使用的是旧的data-method,即使我已将其从DELETE到POST(它仍然发送一个DELETE请求)。但是,如果我刷新页面,HTML与"new"HTML相同(随返回的JS发生变化),但它实际上发送了正确的请求类型。这就是这个问题令我困惑的

  8. ruby-on-rails - 如何通过 POST 发送多个相同的键/参数? - 2

    如果我必须在一个HTTP请求中发送一堆post参数,所有这些参数都具有相同的名称,我该如何构建要发布的data对象?想象一个带有一些复选框的表单,它们都具有相同的name属性但具有不同的值(如果它们被选中):我想用ruby​​构建它(但它需要根据在表单上选择的内容动态创建):data={"color"=>"red","color"=>"green","color"=>"blue"}然后将数据发送到某个URL:Net::HTTP.post_form(url,data)我无法控制接收端,所以我必须发送它期望接收的参数。怎么办? 最佳答案

  9. ruby - HTTP POST 上的 SSL 错误(未知协议(protocol)) - 2

    尝试通过SSL连接到ImgurAPI时出现错误。这是代码和错误:API_URI=URI.parse('https://api.imgur.com')API_PUBLIC_KEY='Client-ID--'ENDPOINTS={:image=>'/3/image',:gallery=>'/3/gallery'}#Public:Uploadanimage##args-Theimagepathfortheimagetoupload#defupload(image_path)http=Net::HTTP.new(API_URI.host)http.use_ssl=truehttp.verify

  10. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

随机推荐