Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery回调函数未访问全局函数_Javascript_Jquery_Scope - Fatal编程技术网

Javascript jquery回调函数未访问全局函数

Javascript jquery回调函数未访问全局函数,javascript,jquery,scope,Javascript,Jquery,Scope,我有两个函数声明为makeAjaxCall和editOrderDetails editOrderDetails执行makeAjaxCall以转到并获取包含调用结果的json对象 function editOrderDetails() { makeAjaxCall( baseurl+'/orderoutbound/editorderdetails', 'orderID='+orderID+'&customerReference='+("#or

我有两个函数声明为makeAjaxCall和editOrderDetails

editOrderDetails执行makeAjaxCall以转到并获取包含调用结果的json对象

    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次以连接并获取信息。这就是问题所在。你可以一连几个小时看着某件事,却忽略了一些显而易见的事情。