Submitting JSON data via JQuery ajax.post to PHP

前端 未结 4 1345
慢半拍i
慢半拍i 2020-11-28 15:33

Im submitting Data to a php file via AJAX using POST. It worked fine with just submitting strings, but now I wanted to submit my JS Object with JSON and decode it on PHP sid

相关标签:
4条回答
  • 2020-11-28 15:53

    Where you went wrong in your code in the first code is that you must have used this:

    var_dump(json_decode(file_get_contents("php://input"))); //and not $_POST['data']
    

    Quoting from PHP Manual

    php://input is a read-only stream that allows you to read raw data from the request body.

    Since in your case, you are submitting a JSON in the body, you have to read it from this stream. Usual method of $_POST['field_name'] wont work, because the post body is not in an URLencoded format.

    In the second part, you must have used this:

    contentType: "application/json; charset=utf-8",
    url: "ajax/selectSingle.php?m=getAbsence",
    data: JSON.stringify({'Absence' : JSON.stringify(this)}),
    

    UPDATE:

    When request has a content type application/json, PHP wont parse the request and give you the JSON object in $_POST, you must parse it yourself from the raw HTTP body. The JSON string is retrieved using file_get_contents("php://input");.

    If you must get that using $_POSTyou would make it:

    data: {"data":JSON.stringify({'Absence' : JSON.stringify(this)})},
    

    And then in PHP do:

    $json = json_decode($_POST['data']);
    
    0 讨论(0)
  • 2020-11-28 16:03

    try this

      var vThis = this;
      this.getAbsence = function()
      {
        alert(JSON.stringify(vThis));
        jQuery.ajax({
           type: "POST",
           contentType: "application/json; charset=utf-8",
           url: "ajax/selectSingle.php?m=getAbsence",
           data: JSON.stringify(vThis),
           success : function(data){
             alert(data);
           } 
         });
       }
    

    EDIT

    I think we can also do this!

      var vThis = this;
      this.getAbsence = function()
      {
        alert(JSON.stringify(vThis));
        jQuery.ajax({
           type: "POST",
           dataType: "json",
           url: "ajax/selectSingle.php?m=getAbsence",
           data: vThis,
           success : function(data){
             alert(data);
           } 
         });
       }
    

    and in PHP

    print_r($_POST);
    
    0 讨论(0)
  • 2020-11-28 16:13

    Single quotes are not valid for php's json_encode, use the double quotes for both field names and values.

    0 讨论(0)
  • 2020-11-28 16:14

    To me, it looks like you should reformat your AJAX object. The url-property should only be the URL for the target php-file and any data that needs to be posted should be in the form of a query-string in the data-property. The following should work as you expected:

    this.getAbsence = function() {
      var strJSONData = JSON.stringify(this);
      alert(strJSONData);
      jQuery.ajax({
        type: 'POST',
        contentType: 'application/json; charset=utf-8',
        url: 'ajax/selectSingle.php',
        data: 'm=getAbsence&Absence=' + strJSONData,
        success: function(data) {
          alert(data);
        }
      });
    }
    
    0 讨论(0)
提交回复
热议问题