我的功能可以';t通过它';s参数值javascript
我一直在努力从函数传递参数,但我真的不知道哪里出了问题。我有一个函数,它有一个参数,我想传递给postData以在jQgrid中显示数据。以下是我的函数代码和参数:我的功能可以';t通过它';s参数值javascript,javascript,jquery,Javascript,Jquery,我一直在努力从函数传递参数,但我真的不知道哪里出了问题。我有一个函数,它有一个参数,我想传递给postData以在jQgrid中显示数据。以下是我的函数代码和参数: function getTID(hdrID){ var selected = $('#editTallyHdr').val(); var hdrID = ''; var hdrNo = ''; var nameFlag=0; var par_ams = { "SessionID": $.cookie
function getTID(hdrID){
var selected = $('#editTallyHdr').val();
var hdrID = '';
var hdrNo = '';
var nameFlag=0;
var par_ams = {
"SessionID": $.cookie("SessionID"),
"dataType": "data"
};
$.ajax({
type: 'GET',
url: 'processjson.php?' + $.param({path:'getData/tallyHdr',json:JSON.stringify(par_ams)}),
dataType: primeSettings.ajaxDataType,
success: function(data) {
if ('error' in data)
{
showMessage('ERROR: ' + data["error"]["msg"]);
}
else{
$.each(data['result']['main']['rowdata'], function(rowIndex, rowDataValue) {
$.each(rowDataValue, function(columnIndex, rowArrayValue) {
var fldName = data['result']['main']['metadata']['fields'][columnIndex].name;
if (fldName == 'transaction_id'){
hdrID = rowArrayValue;
}
if (fldName == 'transaction_num'){
hdrNo = rowArrayValue;
if(selected == hdrNo){
nameFlag =1;
};
}
});
});
}
}
});
return (hdrID);
}
这是我的jQgrid代码,我在其中调用该函数以获取其参数:
$("#tblPlank").jqGrid({
url: '',
datatype: 'local',
jsonReader : {
.
.
.
serializeGridData: function(postData) {
var ctr =0;
var filt=[];
var c=[];
var jsonParams = {
'SessionID': $.cookie("SessionID"),
'dataType': 'data',
'transaction_id':getTID(hdrID),
'filters': c,
'lines':plank_data,
'recordLimit': postData.rows,
'recordOffset': postData.rows * (postData.page - 1),
'rowDataAsObjects': false,
'queryRowCount': true,
'sort_fields': postData.sidx
};
.
.// some code here
.
.
return 'json=' + JSON.stringify(jsonParams);
},
loadError: function(xhr, msg, e) {
showMessage('HTTP error: ' + JSON.stringify(msg) + '.');
},
colNames:[...],
colModel:[
........................
],
.
.
.
caption: "Tally Transaction Details/Lines"
我还有另一个代码,我想从中获取该参数。这是最后一个代码:
var par_ams = {
"SessionID": $.cookie("SessionID"),
"dataType": "data",
"transaction_id": getTID(hdrTID)
}
$('#tblPlank').setGridParam({
url:'processjson.php?path=' + encodeURI('getData/tallyLnDtl') + '&json=' + encodeURI(JSON.stringify(par_ams)),
datatype: primeSettings.ajaxDataType,
});
$('#tblPlank').trigger('reloadGrid');
函数getTID(hdrID)下面的代码无法检索参数,它显示为空。这对任何人来说都很简单,但我真的需要帮助。。这方面的工作已经进行了相当长的时间。问题在于您正在执行一个ajax请求(异步请求)。然后,函数不等待答案到达,而是继续并返回hdrID(当时未设置)。在这之后,将进入一个响应,并调用success方法,该方法将hdrID设置为appropiate值 解决此问题的常用方法是在执行success方法时,使用所需的值执行特定函数。代码太多,无法查看,但可能会出现以下情况:
function fetchContent(continueFunction) {
$.ajax(params).success(function(reply) {
// retrieve desired params from reply
continueFunction(retrievedParameters);
}
}
这是一个非常普遍的误解。仅在过去两周内,我就回答了其中15个问题。ajax调用是一种异步调用。这意味着当您进行ajax调用时,它只是启动请求。然后,当该请求进入后台时,您的代码立即继续执行。这意味着您的函数
getTID()
在ajax调用完成之前返回,其值还不知道。因此,当您从getTID()
返回响应值时,无法从ajax函数返回响应值,因为它还不知道
要处理异步函数调用(如ajax调用),必须将编程风格更改为异步工作的方式。在本例中,对ajax调用的响应只在ajax all的成功处理程序中知道。因此,您必须重新构造代码,以继续执行处理和处理来自成功处理程序的ajax响应。如果您只有一点点工作要做,那么您可以将其全部放入成功处理程序中。如果您有很多工作要做,那么您可以将所有剩余的工作放在一个函数调用中,并从成功处理程序调用它。您可以做的是定义getTID,以便在回调具有id后执行它,例如
function getTID(hdrID, callback) {
//ajax stuff....
success: function (data) {
// Error checks, etc
hdrID = //something dependent on data
callback(hdrID); // THIS IS THE IMPORTANT PART
}
当安全地使用回调中所需的从ajax请求返回的数据时,回调将在请求返回后执行。例如,您可以将需要请求返回值的所有代码包装到回调中
getTID(hdrID, function (ID) {
var params = {
"SessionID": $.cookie("SessionID"),
"dataType": "data",
"transaction_id": ID //USE ID
}
$('#tblPlank').setGridParam({
url:'processjson.php?path=' + encodeURI('getData/tallyLnDtl') + '&json=' + encodeURI(JSON.stringify(par_ams)),
datatype: primeSettings.ajaxDataType,
});
$('#tblPlank').trigger('reloadGrid');
};
});
您不能从该函数返回值,因为它正在发出异步ajax请求。您的意思是我不能从该函数返回ID getId(hdrID)?为什么会这样?你知道如何获取ID吗?
如果你有很多工作要做,那么你可以将所有剩余的工作放在一个函数调用中,并从成功句柄调用它。那么,这是否意味着我仍然可以使用我的函数getTID(hdrTID)
,但我只需要在成功处理程序中调用它?对不起,如果我真的不能理解。我从来都不知道这个。谢谢你的回答,但我真的不知道如何使用你给我的代码。您的第一段是正确的,因为我在提醒ID时注意到了这一点。我尝试使用它,函数fetchContent(continueFunction){$.ajax(params).success(函数(reply){//从reply getID(hdrID);)检索所需的参数}
,但是它给了我一个错误params不是一个函数
。我应该如何将其用于我的代码?