передача функции обратного вызова через окна, вызывающая ошибку, т.е. - PullRequest
1 голос
/ 29 марта 2010

У меня проблема с IE, вызывающая две ошибки:
1. Объект не поддерживает это свойство или метод
2. Вызов был отклонен вызываемым абонентом.

Мое Намерение : Вызвать метод window.opener.myObject, который собирается извлечь некоторые данные с помощью ajax и передать функцию обратного вызова которые живут как вложенная функция во всплывающем окне, которое инициировало вызов, который будет обрабатывать данные ответа и соответственно изменять HTML всплывающего окна.

Вот сценарий : Я открываю всплывающее окно, которое обрабатывает некоторые конкретные операции. Это всплывающее окно, вызывающее метод window.opener.myObject, использующий вызов ajax. Я передаю функцию всплывающего окна, которая будет обрабатывать ответ, и она работает с ff и safari, но не с ie. Вот пример кода

 //RELEVANT SCRIPT ON POPUP WINDOW
 $('#myButton').live('click', function() {
    var h = window.opener.myObject, p = { 'p1': 1 };
    var responseHandler = function(responseObj) {
       //in IE we never got here
       if (!responseObj) {
          alert('Unexpected error!! No response from server');
          return false;
       }
        //..handle response

    };
        p.p1 = $('#control').val();
        h.executeMethod(p, responseHandler);
 });

 //RELEVANT SCRIPT ON WINDOW OPENER MYOBJECT 
try {
 $.ajax({
    type: 'POST',
    async: true,
    url: url,
    data: postData,
    dataType: "json",
    contentType: 'application/x-www-form-urlencoded; charset=utf-8',
    success: r, // r here is reference to my responseHandler popup window function
    error: handleError
 });
} catch (ex) {
 alert(ex.message);
}

Есть советы?

1 Ответ

1 голос
/ 29 марта 2010

Я заставил это работать, не уверен, что это правильный путь или нет, но теперь это работает. Я изменил код myobject для открывания окна из: // СООТВЕТСТВУЮЩИЙ СЦЕНАРИЙ НА WINDOW OPENER MYOBJECT

try {
 $.ajax({
    type: 'POST',
    async: true,
    url: url,
    data: postData,
    dataType: "json",
    contentType: 'application/x-www-form-urlencoded; charset=utf-8',
    success: r, // r here is reference to my responseHandler popup window function**
    error: handleError
 });
} catch (ex) {
 alert(ex.message);
}

до:

//RELEVANT SCRIPT ON WINDOW OPENER MYOBJECT 
try {
 $.ajax({
    type: 'POST',
    async: true,
    url: url,
    data: postData,
    dataType: "json",
    contentType: 'application/x-www-form-urlencoded; charset=utf-8',
    success: function(myResponseObj) {
      r.call(null, myResponseObj);
    }
    error: handleError
 });
} catch (ex) {
 alert(ex.message);
}

поэтому обработчик jquery ajax для успеха был изменен на:

success: function(myResponseObj) {
  r.call(null, myResponseObj);
}

и теперь работает :-) ...

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