функция обратного вызова jquery не имеет доступа к глобальной функции - PullRequest
0 голосов
/ 31 марта 2011

У меня есть 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"); }
            }
        });

как моя функция обратного вызова save, я пытаюсь установить функцию 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 голосов
/ 31 марта 2011

Вы пропускаете $ в звонке на makeAjaxCall.

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

Становится:

'orderID='+orderID+'&customerReference='+$("#orderReference").val()+'&email='+$("#emailAddress").val(),
0 голосов
/ 31 марта 2011

Это http://jsfiddle.net/jQRyq/8/ отлично работает для меня, не могли бы вы опубликовать немного больше кода для контекста?В частности, где определены функции editOrderDetails.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...