Javascript jquery回调函数未访问全局函数
我有两个函数声明为makeAjaxCall和editOrderDetails editOrderDetails执行makeAjaxCall以转到并获取包含调用结果的json对象Javascript jquery回调函数未访问全局函数,javascript,jquery,scope,Javascript,Jquery,Scope,我有两个函数声明为makeAjaxCall和editOrderDetails editOrderDetails执行makeAjaxCall以转到并获取包含调用结果的json对象 function editOrderDetails() { makeAjaxCall( baseurl+'/orderoutbound/editorderdetails', 'orderID='+orderID+'&customerReference='+("#or
function editOrderDetails()
{
makeAjaxCall(
baseurl+'/orderoutbound/editorderdetails',
'orderID='+orderID+'&customerReference='+("#orderReference").val()+'&email='+$("#emailAddress").val(),
function(data){
if(data.success)
{
$("#editOrderDetailsErrorDiv").html(successDiv(data.generalMessage));
$(".customerReferenceSpan").html(data.order.customerReference);
$(".emailSpan").html(data.order.emailAddress);
}else{
$("#editOrderDetailsErrorDiv").html(errorDiv(data.generalMessage));
$("#emailAddressErrorDiv").html(data.errors.emailAddress);
}
},
function(data) {
$("#editOrderDetailsErrorDiv").html(errorDiv("There was an error.."));
}
);
}
现在我使用jquery对话框来处理
$("#editOrderDetailsDialog").dialog('destroy').dialog({
autoOpen: false,
title: 'Edit Order Details',
closeOnEscape: true,
width: 500,
height: 300,
buttons:{
"Save": function() { editOrderDetails(); },
"Cancel": function() { $(this).dialog("close"); }
}
});
作为save回调函数,我正在尝试设置editOrderDetails函数
然而,这是行不通的,我猜这和作用域有关
我已尝试声明var editOrderDetails=function(){};在任何和所有jquery文档就绪函数之外
我还尝试了window.editOrderDetails()
也不是让函数包装函数调用
我尝试将函数放入变量var editOrderDetails=function(){};
然后“保存”:editOrderDetails
我不知所措。有什么好主意吗
PS是对话框正常工作。如果我在回调函数中放置了一个警报,它会在单击“保存”时执行
<script type="text/javascript">
<!--
var orderID = '<?= $this->orderID; ?>';
var customerID = '<?= $this->customerID; ?>';
//################ PAGE FUNCTIONS ################
//MAKE AN AJAX CALL
function makeAjaxCall(ajaxUrl, data, functionSuccess, functionFailure){
$.ajax(
{
type: "GET",
url: ajaxUrl,
contentType: "application/json; charset=utf-8",
data: data,
dataType: "json",
success: functionSuccess,
error: functionFailure
});
}
//END MAKE AN AJAX CALL
//EDIT ORDER DETAILS
function editOrderDetails()
{
makeAjaxCall(
baseurl+'/orderoutbound/editorderdetails',
'orderID='+orderID+'&customerReference='+("#orderReference").val()+'&email='+$("#emailAddress").val(),
function(data){
if(data.success)
{
$("#editOrderDetailsErrorDiv").html(successDiv(data.generalMessage));
$(".customerReferenceSpan").html(data.order.customerReference);
$(".emailSpan").html(data.order.emailAddress);
}else{
$("#editOrderDetailsErrorDiv").html(errorDiv(data.generalMessage));
$("#emailAddressErrorDiv").html(data.errors.emailAddress);
}
},
function(data) {
$("#editOrderDetailsErrorDiv").html(errorDiv("There was an error.."));
}
);
}
//END EDIT ORDER DETAILS
//################ END PAGE FUNCTIONS ################
$(function() {
// EDIT ORDER DETAILS DIALOG
$("#editOrderDetailsDialog").dialog('destroy').dialog({
autoOpen: false,
title: 'Edit Order Details',
closeOnEscape: true,
width: 500,
height: 300,
buttons:{
"Save": function() { editOrderDetails(); },
"Cancel": function() { $(this).dialog("close"); }
}
});
// END EDIT ORDER DETAILS DIALOG
});
//-->
</script>
这对我来说很好,你能为上下文发布更多的代码吗?特别是在定义了
editOrderDetails
函数的地方。在调用makeAjaxCall时,您缺少一个$
'orderID='+orderID+'&customerReference='+("#orderReference").val()+'&email='+$("#emailAddress").val(),
变成:
'orderID='+orderID+'&customerReference='+$("#orderReference").val()+'&email='+$("#emailAddress").val(),
如果在“editOrderDetails()”函数中发出警报,它是否有效?也许你在错误的地方声明了函数。在“document.ready”函数中会出现问题,如果在另一个文件(.js)中调用带有对话框详细信息的文件,则会出现问题。正如Bene所说,这可能与调用函数的位置有关。我猜“editOrderDetails()”是在$(document.ready()之外定义的;这将是一个问题,因为您在加载dom之前依赖于jQuery dom访问。我已经编辑了我的原始文章,以包含脚本的精简版本。在这一点上,脚本实际上有1000行长,所以我不想用代码压倒所有人。我认为你应该删除这个问题,如果你有另一个问题需要调用
$。ajax
则创建一个新问题。好的,你的权利,这实际上是我的makeajaxcall函数的问题:S在editOrderDetails中放置了一个警报函数被调用。但是makeAjaxCall()没有被调用……我对$.ajax或真正的makeAjaxCall()函数没有问题。因为在脚本的其他部分被调用时,两者都可以正常工作。当页面第一次加载感谢帮助时,它会运行3次以连接并获取信息。这就是问题所在。你可以一连几个小时看着某件事,却忽略了一些显而易见的事情。