2010-01-28 1 views
2

Скажем, у меня есть следующий сценарий:Ссылка вызова DOM элемента в jQuery.ajax() с DATATYPE «сценарием»

<form action="/something.php" method="GET">Click me</div> 

<script type="text/javascript"><!-- 
    $('form').submit(function(e) { 
     $.ajax({ 
      url: this.action, 
      method: this.method, 
      dataType: 'script' 
     }); 
     return false; 
    }); 
//--></script> 

Моего вопрос относится к результату JavaScript, возвращенному something.php. Я хочу ссылаться на форму. Обычно я обращался бы через this (как и в случае с this.action и this.method). Однако, это не похоже на работу, когда я вернусь следующее:

alert(this); // displays: [object Window] 

Похоже JQuery выполняет сценарий под видом окна вместо элемента, реализованным событие. Есть ли способ, с помощью которого я могу легко ссылаться на объект, который создавал экземпляр события, без необходимости ссылаться на идентификаторы элементов или что-либо в возвращаемом JavaScript?

+0

Я думаю, что вы должны передать что-то в форму или сохранить переменную cookie/session, поскольку запрос AJAX выполняется в новом состоянии. – davidosomething

ответ

1

я обнаружил, что я могу выполнить следующие действия, чтобы this в ответ на ссылку на вызывающий объект, но я чувствую, что это больше хака, чем должно быть потребовано:

<form action="/something.php" method="GET">Click me</div> 

<script type="text/javascript"><!-- 
    $('form').submit(function(e) { 
     $.ajax({ 
      url: this.action, 
      method: this.method, 
      dataType: 'text', 
      success: function(data) { 
       eval('(function() {' + data + '}).call(this);'); 
      } 
     }); 
     return false; 
    }); 
//--></script> 
+0

Я лучше понял вашу проблему, я изменяю пример. –

0

попробовать таким образом:

EDIT:

HTML:

<div> 
    <form id="myCorrectForm" action="/something.php" method="GET"> 
    <input type="submit" value="Click me" /> 
    </form> 
</div> 

ЯШ:

<script type="text/javascript"><!-- 

    // in this environment is created for the variable "frmRef" public 
    var frmRef = null; 
    $('#myCorrectForm').submit(function(e) { 
     frmRef = $(this); 
     $.ajax({ 
     url: frmRef.attr("action"), 
     method: frmRef.attr("method"), 
     dataType: 'script' 
     }); 
     return false; 
    }); 

//--></script> 

JS в "/something.php":

alert($(window.parent.frmRef).attr('id')); 
+0

Форма отправляется через ту же комбинацию действий/методов, независимо от использования вспомогательных методов jQuery или встроенных свойств/свойств JS-объекта на форме. Исходная проблема 'this', ссылающаяся на окно вместо объекта, вызвавшего событие submit, сохраняется как с вашим методом, так и с моим. –

+0

Я думаю, что вы по-прежнему не понимаете вопрос даже после редактирования своего ответа. У меня нет проблем с выполнением запроса AJAX. Проблема в том, что значение 'this', включенное в мой файл something.php (который отображает JavaScript), ссылается на объект * Window * вместо объекта * form *. –

+0

этот пример работает, но для этого типа случая вы также можете увидеть dataType = "jsonp" –

Смежные вопросы