【问题标题】:jquery post variables not being being passed to phpjquery post变量没有被传递给php
【发布时间】:2019-07-26 09:23:00
【问题描述】:

已解决: 显然唯一出错的是我忘记在查询中的参数周围添加引号。感谢大家的帮助!

我遇到的问题是,由于某种原因,应该在我的 php 文件中填写的变量为空。我正在做一个 $.ajax 的帖子。代码如下。 我已经确保在正在填充数据的模型上通过 console.log() 发送数据时实际填充了数据。

记录的模型:

addedTime: Fri Jul 26 2019 11:01:07 GMT+0200{}
customer: "Test"
message: "test"
message_end_datetime: "2019-07-29"
message_start_datetime: "2019-07-27"

正在发帖的控制器:

$scope.InsertNew = function(){
    var model = {
        "addedTime" : new Date(),
        "customer" : document.getElementById("customer").value,
        "message" : document.getElementById("message").value,
        "message_start_datetime" : document.getElementById("startTime").value,
        "message_end_datetime" : document.getElementById("endTime").value
    };
    console.log(model);
    var dump = $.ajax({
        type: "POST",
        url: "http/NewMessage.php",
        data: JSON.stringify(model),
        contentType: "application/json; charset=utf-8",
        success: function () {
        console.log("succes");
}
      });
}

然后在 NewMessage.php 中:

<?php
include "include.php"; // has the query php file. 
// $addedTime = $input['addedTime'];
$addedTime = $_POST["addedTime"];
$customer = $_POST["customer"];
$message = $_POST["message"];
$message_start_datetime = $_POST["message_start_datetime"];
$message_end_datetime = $_POST["message_end_datetime"];
newMessageQuery($addedTime,$customer,$message,
$message_start_datetime,$message_end_datetime);

最后在查询文件中:

// doenst work
    function  newMessageQuery($addedTime,$customer,$message,$message_start_datetime,$message_end_datetime){
    $recordsQuery = " INSERT into customernews (added_datetime,customer,message,message_start_datetime,message_end_datetime) 
                        values ('2019-07-26',$customer,$message,'2019-07-26','2019-07-26') "; 
        return executeObjectQuery($recordsQuery);  // executes the query  
    }

//works
    function newMessageQuery($addedTime,$customer,$message,$message_start_datetime,$message_end_datetime){
        $recordsQuery = " INSERT into customernews (added_datetime,customer,message,message_start_datetime,message_end_datetime) 
                            values ('2019-07-26','test','testklant','2019-07-26','2019-07-26') "; 
            return executeObjectQuery($recordsQuery);    
        }

如上所示,我已经通过仅使用默认硬编码值测试了查询,然后它就可以工作了。

但是,当使用应该传递的参数值之一不起作用时,我没有收到任何 php 错误,因为它确实在 javascript 中返回了成功,这使我相信变量没有在 NewMessage 中填充。

当我通过 post 传递值时我做错了什么还是其他什么?

编辑: 我得到 string(0) "" 作为响应,下面的响应。

Request URL: ../http/NewMessage.php
Request Method: GET
Status Code: 200 OK
Remote Address: 10.0.28.167:80
Referrer Policy: no-referrer-when-downgrade
Connection: Keep-Alive
Content-Length: 13
Content-Type: text/html; charset=UTF-8
Date: Fri, 26 Jul 2019 09:43:15 GMT
Keep-Alive: timeout=5, max=99
Server: Apache/2.4.23 (Win32) OpenSSL/1.0.2h PHP/5.6.28
X-Powered-By: PHP/5.6.28
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate
Accept-Language: nl-NL,nl;q=0.9,en-US;q=0.8,en;q=0.7
Cache-Control: no-cache
Connection: keep-alive
Host: retail-web-03
Pragma: no-cache
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36

已解决: 显然唯一出错的是我忘记在查询中的参数周围添加引号。感谢大家的帮助!

【问题讨论】:

  • 您错误地期望 $_POST 为此类请求填充。
  • 客户:$("#customer").val() 试试这个
  • @Jack 我应该把那个放在哪里?在进行发布请求时在数据中?
  • 在不起作用的查询中,您仍然必须像使用硬编码的那样将值括在单引号中。它是 '$customer' 而不是 $customer,除非这是一个 INT 类型字段并且 $customer 返回一个数值。 $message 相同,应该是 '$message'

标签: javascript php jquery post


【解决方案1】:

您在请求的Body 中发送数据。 $_POST方法只针对form-data,这里的格式是application/json

所以你需要使用file_get_contents() 而不是$_POST。你的代码会是这样的,

$inputJSON = file_get_contents('php://input');
$input = json_decode($inputJSON, TRUE);

$addedTime = $input["addedTime"];
$customer = $input["customer"];
$message = $input["message"];
$message_start_datetime = $input["message_start_datetime"];
$message_end_datetime = $input["message_end_datetime"];

【讨论】:

  • 除了用您刚刚发布的内容更改代码之外,我还需要做些什么吗?因为我仍然没有得到结果
  • 不,没有错误,post 请求仍然返回成功。
  • 首先只需输入var_dump($input) 并检查您是否获取数据,
  • 是的,我正在为空
  • 好的,把var_dump($inputJSON )放在$inputJSON = file_get_contents('php://input');之后。并检查它返回的内容。
猜你喜欢
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多