jquery回调函数不访问全局函数

时间:2011-03-31 02:03:44

标签: javascript jquery scope

我有2个函数声明为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"); }
            }
        });

作为我的保存回调函数我正在尝试设置我的editOrderDetails函数。

然而,这不起作用,我猜它与范围有关。

我试过声明var editOrderDetails = function(){};在任何和所有jquery doc ready函数之外

我也尝试过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>

2 个答案:

答案 0 :(得分:0)

这个http://jsfiddle.net/jQRyq/8/对我来说很好,你能为上下文发布更多的代码吗?特别是定义editOrderDetails函数的地方。

答案 1 :(得分:0)

您在调用makeAjaxCall时错过了 $

'orderID='+orderID+'&customerReference='+("#orderReference").val()+'&email='+$("#emailAddress").val(),

变为:

'orderID='+orderID+'&customerReference='+$("#orderReference").val()+'&email='+$("#emailAddress").val(),