Javascript 如何在jquery中访问forEach之外的值
编辑 我这里的问题是我需要访问forEach循环外部的字段值。如何使用jquery或javascript实现这一点 编辑Javascript 如何在jquery中访问forEach之外的值,javascript,jquery,html,Javascript,Jquery,Html,编辑 我这里的问题是我需要访问forEach循环外部的字段值。如何使用jquery或javascript实现这一点 编辑 查看编辑后的问题“我想在MandatoryFields中使用该字段数组。用户,但如果我使用它,它不会显示值”,您应该在jquery中使用ajax方法 "api/mapping/mandatoryfield?type=USER" returns ["First Name", "Last Name", "Location", "Email", "Password"], 由于
查看编辑后的问题“我想在MandatoryFields中使用该字段数组。用户,但如果我使用它,它不会显示值”,您应该在jquery中使用ajax方法
"api/mapping/mandatoryfield?type=USER" returns
["First Name", "Last Name", "Location", "Email", "Password"],
由于$.get()是一个异步方法,因此可以使用async/await从$.get方法的回调中访问返回的值
function GetMandatoryFieldsforUser( data)
{
var field= [];
var scriptUrl = "api/mapping/mandatoryfield?type=USER";
$.ajax({
url: scriptUrl,
type: 'get',
dataType: 'html',
async: true,
success: function(data) {
var self = this;
self.dt = [];
self.firmdata = JSON.parse(data.Data);
console.log(self.firmdata);
self.firmdata.forEach(function (item) {
field.push(item.DisplayName);
})
console.log(field)
}
});
return field;
}
这将实现$.ajax:
GetMandatoryFieldsforUser: async function (data) {
var field = [];
const returnedField = await $.get("api/mapping/mandatoryfield?type=USER", function (data) {
var self = this;
self.dt = [];
self.firmdata = JSON.parse(data.Data);
console.log(self.firmdata);
self.firmdata.forEach(function (item) {
field.push(item.DisplayName);
})
console.log(field) //able to print value
return field;
}).promise()
console.log(returnedField) // not able to print value
},
问题不在于forEach方法。$。get()方法是一个异步方法。因此,首先执行$.get()方法之外的console.log(字段),然后只调用$.get()的回调。thanks@BearNithi如何克服这个问题issue@chethu使用jQuery.ajax并在检索数据后依靠其自己的“done”函数执行代码。请,提供此请求api/mapping/mandatoryfield?类型返回的数据=USER@GrafiCodeStudio检查问题中的回答警告:使用async:false绝对不是一个好选择。您所写的与我的相同,但不起作用expected@chethu我读了你最近的帖子,我编辑了我的答案并添加了注释,以澄清您必须在.done()部分中处理ajax检索到的数据。我得到了这一点,但我想在其他文件中使用此字段值。如果我在ajax函数中返回此字段值,则它不会在该文件中显示这些值
function GetMandatoryFieldsforUser( data)
{
var field= [];
var scriptUrl = "api/mapping/mandatoryfield?type=USER";
$.ajax({
url: scriptUrl,
type: 'get',
dataType: 'html',
async: true,
success: function(data) {
var self = this;
self.dt = [];
self.firmdata = JSON.parse(data.Data);
console.log(self.firmdata);
self.firmdata.forEach(function (item) {
field.push(item.DisplayName);
})
console.log(field)
}
});
return field;
}
GetMandatoryFieldsforUser: async function (data) {
var field = [];
const returnedField = await $.get("api/mapping/mandatoryfield?type=USER", function (data) {
var self = this;
self.dt = [];
self.firmdata = JSON.parse(data.Data);
console.log(self.firmdata);
self.firmdata.forEach(function (item) {
field.push(item.DisplayName);
})
console.log(field) //able to print value
return field;
}).promise()
console.log(returnedField) // not able to print value
},
GetMandatoryFieldsforUser: function (data) {
var field = [];
$.ajax({
url: "api/mapping/mandatoryfield?type=USER"
}).done(function(data) {
// THIS PORTION IS EXECUTED AFTER DATA IS LOADED
var self = this;
self.dt = [];
self.firmdata = JSON.parse(data.Data);
console.log(self.firmdata);
self.firmdata.forEach(function (item) {
field.push(item.DisplayName);
})
console.log(field)
/*
USE return HERE!
*/
return field; // OR SOMETHING ELSE
})
// THIS WON'T WORK, BECAUSE DATA IS RETRIEVED IN ASYNC!
console.log(field)
},