簡體   English   中英

當我使用 jquery ajax 運行 $.post 時,當我使用 json 參數解碼時,我的帖子為空。 我該如何解決?

[英]When I run a $.post with jquery ajax, my Post is empty when I decode with the json parameter. How do I fix that?

該代碼從 php 文件中請求一個關聯數組。 有一個我正在使用的代碼示例:

function cOffices() {
    return $.post('../../init.php', {
        getOffice: ''
    }, (data) => {
    }, 'json');
}
cOffices()
        .done((data) => {
            console.log(data);
        });

那段代碼沒有在控制台上顯示任何數據。 但是如果我更改代碼並且不使用“json”數據類型,它會在一個字符串中顯示所有 arrays

function cOffices() {
    return $.post('../../init.php', {
        getOffice: ''
    }, (data) => {
    }, 'json');
}

這是我的 php 文件

if (isset($_REQUEST['getOffice'])) {
            $oficModel = new User();

            $getO = $oficModel -> getOfficeData($config['dirLogin'], $config['dirPass']);

            echo json_encode($getO);
        }

順便說一下,這些是我的腳本:

<script src="../js/jquery-3.6.0.min.js"></script>
<script type="module" src="../js/users.js"></script>

更新:我想在另一個請求中請求數據后使用該請求。 這是一個例子:

$.post('../../init.php', {
        getCreate: ''
    }, (data) => {
        let lOptions = '';

        data.forEach((d) => {
            lOptions += `<option value="${d.id_grupo}">${d.nom_grupo}</option>`;
        });

        let formCreate = `<div class="formCreate">
            <form action="../../init.php" method="POST" id="formCreate" autocomplete="off">
                <button type="button" class="closeForm"><i class="fas fa-times"></i></button>
                <h2>Create User</h2>
                <input required type="email" name="cMail" placeholder="Insert E-Mail"
                maxlength="35" id="cMail">
                <input required type="password" name="cPass" placeholder="Insert Password"
                maxlength="24" id="cPass">
                <input required type="text" name="cName" placeholder="Insert Name"
                maxlength="40" id="cName">
                <div class="selectOffice">
                    <select name="cOffice" id="cOffice" required>
                        <option value="" disabled selected>Select an Office</option>
                        ${lOptions}
                    </select>
                </div>
                <div class="selectCreate">
                    <select name="cGroup" id="cGroup" required>
                        <option value="" disabled selected>Select a Group</option>
                        ${lOffices}
                    </select>
                </div>
                <button type="submit" name="saveUser">Save</button>
            </form>
        </div>`;

        $('.container1').prepend(formCreate);
        $('.formCreate').fadeTo(400, 1);
    },'json');
}

另一個更新 [已解決]我發現錯誤,在我的 php 中我有 2 個同名進程,所以當我調用 ajax 時,數據是 2 個 json 編碼字符串,ajax 無法解碼。 帶來不便敬請諒解

嘗試使用

cOffices.error(function(jqXHR, textStatus, errorThrown) {
        console.log("error " + textStatus);
        console.log("incoming Text " + jqXHR.responseText);
    })

定義錯誤的原因。 可能是您在響應中損壞了 JSON。

還要在開發控制台的 .network 選項卡中檢查您的請求

考慮以下示例。

 $(function() { function cOffices() { $.ajax({ url: "../../init.php", type: "POST", data: { getOffice: true }, dataType: "json", success: function(results) { return results; }, error: function(x, status, error) { console.log("Error:", status, error); } }); } $("button").click(function() { console.log(cOffices()); }); });
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

使用$.post()非常相似。 它還應該識別 JSON 數據,但這只是更具體一點。

更新

現在看到您的 PHP,我建議在getOffice變量中輸入一個值。 是的, ""應該可以工作,並且isset()應該檢測到它是一個帶有空字符串集的變量,最好傳遞一個變量以防萬一。 例如,我用getOffice: true更新了我的。

更新 2

我創建了以下示例小提琴: https://jsfiddle.net/Twisty/7oh29dyj/

JavaScript (jQuery 3.6.0)

$(function() {
  var testData = JSON.stringify([{
    "id_lugar": "1",
    "desc_lugar": "Oficina N\u00famero 1",
    "dir_lugar": "Calle Random 1",
    "depart_lugar": "Montevideo",
    "ciudad_lugar": "Montevideo",
    "tel_lugar": "94132471",
    "fk_dep": "0"
  }]);

  var myData = [];

  function cOffices() {
    var myPost = $.ajax({
      url: "/echo/json/",
      type: "POST",
      data: {
        json: testData
      },
      dataType: "json",
      success: function(results) {
        myData = results;
        $(".results").html(JSON.stringify(results));
      }
    });
  }

  $("button").click(function() {
    cOffices();
  });
});

這是在小提琴中工作。 請記住, resultsdata的 scope 僅存在於該回調中。 通常最好在同一回調中對數據執行您想要的操作。

我的示例將數據放在一個更全局范圍的變量中,因此您可以根據需要從其他函數獲取它。 如果要管理數據,則必須等到 AJAX 完成。 由於 JS 的異步特性,您可能需要等到就緒 state 完成以確保填充變量。

更新 3

嘗試以下操作。

$.post('../../init.php', {
  getCreate: ''
}, (data) => {
  var formCreate = "<div class='formCreate'><form action='../../init.php' method='POST' id='formCreate' autocomplete='off'><button type='button' class='closeForm'><i class='fas fa-times'></i></button><h2>Create User</h2><input required type='email' name='cMail' placeholder='Insert E-Mail' maxlength='35' id='cMail'><input required type='password' name='cPass' placeholder='Insert Password' maxlength='24' id='cPass'><input required type='text' name='cName' placeholder='Insert Name' maxlength='40' id='cName'><div class='selectOffice'><select name='cOffice' id='cOffice' required><option value='' disabled selected>Select an Office</option></option></select></div><div class='selectCreate'><select name='cGroup' id='cGroup' required><option value='' disabled selected>Select a Group</option></select></div><button type='submit' name='saveUser'>Save</button></form></div>";

  $.each(data, function(k, v) {
    $("<option>", {
      value: v.id_grupo
    }).html(v.nom_grupo).appendTo($("#cOffice", formCreate));
    $("<option>", {
      value: v.id_grupo
    }).html(v.nom_grupo).appendTo($("#cGroup", formCreate));
  });

  $('.container1').prepend(formCreate);
  $('.formCreate').fadeTo(400, 1);
}, "json");

這首先創建了所有相關的 HTML,然后附加數據中的動態元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM