AJAX Post 没有形式的功能不重置
AJAX Post Function without form Not Reset
你好,我对 ajax POST 方法有点困惑,我试着发出 api 请求,因为响应有一个类似的参数,所以我把它作为一个全局函数它可以被我的其他 html / js 在其他页面中使用,我知道 ajax post 将使所需的功能刷新。但我不知道如何在 html 表单上使用我的 ajax 函数,因为我直接使用按钮调用请求函数但它最终会阻止下一个请求调用(GET/PUT/DELETE 变得不可执行),因为我没有使用 html 表单,我可以在不刷新整个页面的情况下刷新功能,还是我需要使用 html 表单?任何解释或回应将不胜感激
这里是我的js示例代码
document.getElementById('confirmSubmit').addEventListener('click', function(){
var query = {};
query['a'] = 'a';
query['b'] = 'b';
query['c'] = 'c';
request(url, query, 'POST');
});
function request(url, query, method){
if (method == 'POST'){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
processData: false,
contentType: false,
cache: false,
});
}
else{
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
});
}
document.getElementById("div-overlay-w-100-h-100").style.display = 'block';
$.ajax({
url: url,
method: method,
dataType: "text json",
type: method,
data: query,
timeout: 900000,
success: function(response){
// LONG PROCESS HERE
},
error:function(rr){
console.log(rr);
}
});
}
这是我的 html
<div class="pcp-tabs-a-container" style="margin-left: 10%;">
<div class="pcp-add-container-a-container" style="margin-top: -10px;">
<label for="id" class="form-label" style="font-size: 16px;"><strong>ID*:</strong></label>
<input type="text" name="id" id="id" class="form-control" style="max-width: 88%; cursor: text;" autocomplete="off">
</div>
<div class="pcp-add-container-a-container" style="margin-top: -10px;">
<label for="nama" class="form-label" style="font-size: 16px;"><strong>Name*:</strong></label>
<input type="text" name="nama" id="nama" class="form-control" style="max-width: 88%; cursor: text;" autocomplete="off">
</div>
<div class="pcp-add-container-a-container" style="margin-top: -10px;">
<label for="desc" class="form-label" style="font-size: 16px;"><strong>Desc*:</strong></label>
<input type="text" name="desc" id="desc" class="form-control" style="max-width: 88%; cursor: text;" autocomplete="off">
</div>
<div class="pcp-add-container-a-container" style="margin-top: -10px;">
<label for="info" class="form-label" style="font-size: 16px;"><strong>Info:</strong></label>
<input type="text" name="info" id="info" class="form-control" style="max-width: 88%; cursor: text;" autocomplete="off">
</div>
<div class="pcp-add-container-a-container" style="margin-top: -10px;">
<label for="order" class="form-label" style="font-size: 16px;"><strong>Order:</strong></label>
<input type="text" name="order" id="order" class="form-control" style="max-width: 88%; cursor: text;" autocomplete="off">
</div>
</div>
<div>
<button class="btn-primary" id="confirmSubmit" style="margin-bottom: 20px; height: 40px; width: 130px; margin-left: 10px; font-size: 16px; border-radius: 5px;">Submit</button>
</div>
编辑:
感谢@Ravi Makwana 的精彩回答让我得到了我正在寻找的问题,我编辑了一些行以使其更加完美,因为我的 if else 方法函数将保持 ajax 不被覆盖。所以我没有直接设置 ajaxsetup,而是按照@Ravi Makwana
的建议将其添加到数组中
var ajaxSetup = {
url: url,
method: method,
dataType: "text json",
type: method,
data: query,
timeout: 900000,
success: function(response){
// LONG PROCESS HERE
},
error:function(rr){
console.log(rr);
}
};
if (method == 'POST'){
ajaxSetup.headers= {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
};
ajaxSetup.processData= false;
ajaxSetup.contentType= false;
ajaxSetup.cache= false;
}
else {
ajaxSetup.headers= {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
};
}
将上面的代码更改为
var ajaxSetup = {
url: url,
method: method,
dataType: "text json",
type: method,
data: query,
timeout: 900000,
success: function(response){
// LONG PROCESS HERE
},
error:function(rr){
console.log(rr);
}
};
if (method == 'POST'){
ajaxSetup['processData'] = false;
ajaxSetup['contentType'] = false;
ajaxSetup['cache'] = false;
}
这可能是这部作品
您可能 $.ajaxSetup
没有覆盖您的设置
所以只需尝试创建变量并将所有设置设置到变量中
function request(url, query, method){
var ajaxSetup = {
url: url,
method: method,
dataType: "text json",
type: method,
data: query,
timeout: 900000,
success: function(response){
// LONG PROCESS HERE
},
error:function(rr){
console.log(rr);
}
};
if (method == 'POST'){
ajaxSetup.headers= {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
};
ajaxSetup.processData= false;
ajaxSetup.contentType= false;
ajaxSetup.cache= false;
}
else {
ajaxSetup.headers= {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
};
}
document.getElementById("div-overlay-w-100-h-100").style.display = 'block';
$.ajax(ajaxSetup);
}
你好,我对 ajax POST 方法有点困惑,我试着发出 api 请求,因为响应有一个类似的参数,所以我把它作为一个全局函数它可以被我的其他 html / js 在其他页面中使用,我知道 ajax post 将使所需的功能刷新。但我不知道如何在 html 表单上使用我的 ajax 函数,因为我直接使用按钮调用请求函数但它最终会阻止下一个请求调用(GET/PUT/DELETE 变得不可执行),因为我没有使用 html 表单,我可以在不刷新整个页面的情况下刷新功能,还是我需要使用 html 表单?任何解释或回应将不胜感激
这里是我的js示例代码
document.getElementById('confirmSubmit').addEventListener('click', function(){
var query = {};
query['a'] = 'a';
query['b'] = 'b';
query['c'] = 'c';
request(url, query, 'POST');
});
function request(url, query, method){
if (method == 'POST'){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
processData: false,
contentType: false,
cache: false,
});
}
else{
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
},
});
}
document.getElementById("div-overlay-w-100-h-100").style.display = 'block';
$.ajax({
url: url,
method: method,
dataType: "text json",
type: method,
data: query,
timeout: 900000,
success: function(response){
// LONG PROCESS HERE
},
error:function(rr){
console.log(rr);
}
});
}
这是我的 html
<div class="pcp-tabs-a-container" style="margin-left: 10%;">
<div class="pcp-add-container-a-container" style="margin-top: -10px;">
<label for="id" class="form-label" style="font-size: 16px;"><strong>ID*:</strong></label>
<input type="text" name="id" id="id" class="form-control" style="max-width: 88%; cursor: text;" autocomplete="off">
</div>
<div class="pcp-add-container-a-container" style="margin-top: -10px;">
<label for="nama" class="form-label" style="font-size: 16px;"><strong>Name*:</strong></label>
<input type="text" name="nama" id="nama" class="form-control" style="max-width: 88%; cursor: text;" autocomplete="off">
</div>
<div class="pcp-add-container-a-container" style="margin-top: -10px;">
<label for="desc" class="form-label" style="font-size: 16px;"><strong>Desc*:</strong></label>
<input type="text" name="desc" id="desc" class="form-control" style="max-width: 88%; cursor: text;" autocomplete="off">
</div>
<div class="pcp-add-container-a-container" style="margin-top: -10px;">
<label for="info" class="form-label" style="font-size: 16px;"><strong>Info:</strong></label>
<input type="text" name="info" id="info" class="form-control" style="max-width: 88%; cursor: text;" autocomplete="off">
</div>
<div class="pcp-add-container-a-container" style="margin-top: -10px;">
<label for="order" class="form-label" style="font-size: 16px;"><strong>Order:</strong></label>
<input type="text" name="order" id="order" class="form-control" style="max-width: 88%; cursor: text;" autocomplete="off">
</div>
</div>
<div>
<button class="btn-primary" id="confirmSubmit" style="margin-bottom: 20px; height: 40px; width: 130px; margin-left: 10px; font-size: 16px; border-radius: 5px;">Submit</button>
</div>
编辑: 感谢@Ravi Makwana 的精彩回答让我得到了我正在寻找的问题,我编辑了一些行以使其更加完美,因为我的 if else 方法函数将保持 ajax 不被覆盖。所以我没有直接设置 ajaxsetup,而是按照@Ravi Makwana
的建议将其添加到数组中var ajaxSetup = {
url: url,
method: method,
dataType: "text json",
type: method,
data: query,
timeout: 900000,
success: function(response){
// LONG PROCESS HERE
},
error:function(rr){
console.log(rr);
}
};
if (method == 'POST'){
ajaxSetup.headers= {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
};
ajaxSetup.processData= false;
ajaxSetup.contentType= false;
ajaxSetup.cache= false;
}
else {
ajaxSetup.headers= {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
};
}
将上面的代码更改为
var ajaxSetup = {
url: url,
method: method,
dataType: "text json",
type: method,
data: query,
timeout: 900000,
success: function(response){
// LONG PROCESS HERE
},
error:function(rr){
console.log(rr);
}
};
if (method == 'POST'){
ajaxSetup['processData'] = false;
ajaxSetup['contentType'] = false;
ajaxSetup['cache'] = false;
}
这可能是这部作品
您可能 $.ajaxSetup
没有覆盖您的设置
所以只需尝试创建变量并将所有设置设置到变量中
function request(url, query, method){
var ajaxSetup = {
url: url,
method: method,
dataType: "text json",
type: method,
data: query,
timeout: 900000,
success: function(response){
// LONG PROCESS HERE
},
error:function(rr){
console.log(rr);
}
};
if (method == 'POST'){
ajaxSetup.headers= {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
};
ajaxSetup.processData= false;
ajaxSetup.contentType= false;
ajaxSetup.cache= false;
}
else {
ajaxSetup.headers= {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
};
}
document.getElementById("div-overlay-w-100-h-100").style.display = 'block';
$.ajax(ajaxSetup);
}