jjzjj

php - jQuery post 请求中断 : Only half of post parameters arrive

coder 2023-06-10 原文

我注意到我的 LAMP 环境中有一个奇怪的现象。
在前端,我使用 jQuery 执行 AJAX 发布请求,如下所示:

$.post('save.php', {data1: d1, data2: d2, [...],  dataN: dN})

变量 d1dN 是预先使用 jQuery 从网站(例如,从文本输入、文本区域、复选框等)收集的。

save.php 文件将 post 参数 data1 带到 dataN 并在一次查询中将它们保存在数据库中。

请求大约需要 500 毫秒,并且可以正常工作除非我在请求期间更改了页面(例如通过单击链接)。

通常,我希望请求被中止和忽略(这很好)但是(这是奇怪的行为)请求似乎已完成,但只有部分数据传输并因此保存。

这意味着例如,php 脚本只保存 data1data5 并将 data6 设置为 dataN清空。
该问题似乎是由 AJAX 请求(不是 php 脚本)引起的,因为字段 $_POST['data6']$_POST['dataN'] 不是在这种情况下在 php 中设置。

所以我的问题:
为什么会发生这种情况(这是预期的行为)?
我该如何避免呢?

更新
问题既不是 jQuery 也不是 php。 jQuery 正确收集值并尝试将它们发布到 php.ini。我刚刚验证了它 - 它有效。 另一方面,php 脚本会按预期处理它所获得的一切——它只是没有收到整个请求。
所以问题一定是被中断的请求本身。不像我期望的那样,它不会中止或失败,它仍然会传输所有数据,直到中断。
然后 php 获取这个帖子数据并开始处理它 - 显然缺少一些信息。

更新 2
我通过在 dataN 之后添加参数 eof 并检查它是否在 php.ini 中设置来解决了这个问题。这样我就可以确定整个请求都被传输了。
尽管如此,这并不能解决我仍然不明白的问题的根源。
对任何人有帮助吗?

最佳答案

尝试以下操作来调试问题:

  1. 检查您的 php 设置中的 post_max_size 并将其与您发布的数据大小进行比较。

  2. 用户 HTTP 请求生成器,即使用 Fiddler 发出 http 请求并检查它返回的内容。

  3. 使用 save.php 顶部的 print_r($_POST); 来检查你得到了什么。

  4. 使用 Firebug 之类的工具来检查 jQuery 发布的内容。

  5. 您还应该在客户端验证您发布的 json 对象。即 JSON.stringify(some_object);

  6. 尝试发布一些基本示例数据 { "data1":1, "data2":2, "data3":3, "data4":4, "data5":5 , "data6": 6 }

很可能您正在发送大量数据或数据可能无效!

修改: 非常愚蠢的行为,但可以说您也发布了计数。所以直接检查isset($_POST['data'.$_POST['count']])

关于php - jQuery post 请求中断 : Only half of post parameters arrive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16934226/

有关php - jQuery post 请求中断 : Only half of post parameters arrive的更多相关文章

  1. ruby-on-rails - Rails HTML 请求渲染 JSON - 2

    在我的Controller中,我通过以下方式在我的index方法中支持HTML和JSON:respond_todo|format|format.htmlformat.json{renderjson:@user}end在浏览器中拉起它时,它会自然地以HTML呈现。但是,当我对/user资源进行内容类型为application/json的curl调用时(因为它是索引方法),我仍然将HTML作为响应。如何获取JSON作为响应?我还需要说明什么? 最佳答案 您应该将.json附加到请求的url,提供的格式在routes.rb的路径中定义。这

  2. 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来发送

  3. ruby - ruby 乘法语句中星号中断语法前的空格 - 2

    在添加一些空格以使代码更具可读性时(与上面的代码对齐),我遇到了这个:classCdefx42endendm=C.new现在这将给出“错误数量的参数”:m.x*m.x这将给出“语法错误,意外的tSTAR,期待$end”:2/m.x*m.x这里的解析器到底发生了什么?我使用Ruby1.9.2和2.1.5进行了测试。 最佳答案 *用于运算符(42*42)和参数解包(myfun*[42,42])。当你这样做时:m.x*m.x2/m.x*m.xRuby将此解释为参数解包,而不是*运算符(即乘法)。如果您不熟悉它,参数解包(有时也称为“spl

  4. ruby - 在 ASP 页面上 Mechanize 中断 - 2

    require'mechanize'agent=Mechanize.newlogin=agent.get('http://www.schoolnet.ch/DE/HomeDE.htm')agent.clicklogin.link_withtext:/Login/然后我得到Mechanize::UnsupportedSchemeError。 最佳答案 Mechanize不支持javascript但您可以将搜索字段添加到表单并为其分配搜索词并使用mechanize提交表单form=page.forms.firstform.add_fie

  5. ruby - HTTP 请求中的用户代理,Ruby - 2

    我是Ruby的新手。我试过查看在线文档,但没有找到任何有效的方法。我想在以下HTTP请求botget_response()和get()中包含一个用户代理。有人可以指出我正确的方向吗?#PreliminarycheckthatProggitisupcheck=Net::HTTP.get_response(URI.parse(proggit_url))ifcheck.code!="200"puts"ErrorcontactingProggit"returnend#Attempttogetthejsonresponse=Net::HTTP.get(URI.parse(proggit_url)

  6. ruby - 可以正常中断的来自 Rake 的长时间运行的 shell 命令? - 2

    在几个项目中,我希望有一个类似rakeserver的rake任务,它将通过任何需要的方式开始为该应用程序提供服务。这是一个示例:task:serverdo%x{bundleexecrackup-p1234}end这行得通,但是当我准备停止它时,按Ctrl+c并没有正常关闭;它中断了Rake任务本身,它说rakeaborted!并给出堆栈跟踪。在某些情况下,我必须执行Ctrl+c两次。我可能可以用Signal.trap写一些东西来更优雅地中断它。有没有更简单的方法? 最佳答案 trap('SIGINT'){puts"Yourmessa

  7. ruby-on-rails - prawnto 显示新页面时不会中断的表格 - 2

    我有可变数量的表格和可变数量的行,我想让它们一个接一个地显示,但如果表格不适合当前页面,请将其放在下一页,然后继续。我已将表格放入事务中,以便我可以回滚然后打印它(如果高度适合当前页面),但我如何获得表格高度?我现在有这段代码pdf.transactiondopdf.table@data,:font_size=>12,:border_style=>:grid,:horizontal_padding=>10,:vertical_padding=>3,:border_width=>2,:position=>:left,:row_colors=>["FFFFFF","DDDDDD"]pdf.

  8. ruby-on-rails - 获取并发布相同匹配项的请求 - 2

    在我的路线文件中我有:match'graphs/(:id(/:action))'=>'graphs#(:action)'如果是GET请求(工作)或POST请求(不工作),我想匹配它我知道我可以使用以下方法在资源中声明POST请求:post'/'=>:show,:on=>:member但是我怎样才能为比赛做到这一点呢?谢谢。 最佳答案 如果你同时想要POST和GETmatch'graphs/(:id(/:action))'=>'graphs#(:action)',:via=>[:get,:post]编辑默认值可以设置如下match'g

  9. ruby-on-rails - 如何在 ActionController::TestCase 请求中设置内容类型 - 2

    我试图像这样在我的测试用例中执行获取:request.env['CONTENT_TYPE']='application/json'get:index,:application_name=>"Heka"虽然,它失败了:ActionView::MissingTemplate:Missingtemplatealarm_events/indexwith{:handlers=>[:builder,:haml,:erb,:rjs,:rhtml,:rxml],:locale=>[:en,:en],:formats=>[:html]尽管在我的Controller中我有:respond_to:html,

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

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

随机推荐