[英]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();
});
});
這是在小提琴中工作。 請記住, results
或data
的 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.