2010-01-28 23 views
2

DOM元素比方說,我有以下情形:參考調用jQuery.ajax()由於數據類型「腳本」

<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> 

我的問題涉及到由something.php返回的JavaScript的結果。我想參考表格。正常情況下,我會通過this來引用(就像我上面的this.actionthis.method一樣)。然而,這似乎並不當我回去工作如下:

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

它看起來像jQuery是窗口實例化事件的元素,而不是假借執行腳本。有沒有一種方法可以輕鬆引用實例化事件的對象,而無需引用元素ID或返回的JavaScript中的任何內容?

+0

我想你會必須將某些內容傳遞給表單或保留cookie/session變量,因爲AJAX請求發生在新狀態 – davidosomething 2010-01-28 18:26:16

回答

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

我更好地理解你的問題,我修改了這個例子。 – 2010-01-28 20:36:02

0

嘗試了這種方式:

編輯:

HTML:

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

JS:

<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'的原始問題與我的方法一樣,仍然存在。 – 2010-01-28 18:41:30

+0

即使編輯完答案後,我仍然認爲你仍然誤解了這個問題。我沒有執行AJAX請求的麻煩。問題是包含在我的something.php文件(呈現JavaScript)中的'this'的值引用* Window *對象而不是* form *對象。 – 2010-01-28 19:08:43

+0

這個例子可以工作,但是對於這種情況,你可以看到dataType =「jsonp」 – 2010-01-28 20:01:14