2012-05-22 50 views
2

我整天都在用這個問題抨擊我的頭。我缺乏JavaScript的豐富知識,對於DOM操作,我開始使用jQuery。構建一些基本的東西很容易。我想要的是構建自定義函數,該函數將根據我傳遞給此函數的輸入參數從列表中填充表單,該表單將從數據庫中取出。Ajax自定義函數不能按預期工作

的代碼應該是這樣的:

(function($) { 
     $.fn.multiSelect = function(a,b,c) { 
     var someVar1 = parseInt(a,10); 
     var someVar2 = parseInt(b,10); 
     var someVar3 = c; 
     var dataString = "a=" + someVar1 + "&b=" + someVar2 + "&c=" + someVar3; 
     $.ajax({ 
      type:  "POST", 
      url:  "test_ajax.php", 
      data:  dataString, 
      dataType: 'json', 
      success: function(data) { 
       var a1 = data['a']; 
       var b1 = data['b']; 
       var c1 = data['c']; 
       return $(this).html('<p>' + a1 + b1 + c1 + '</p>'); 
      } 
     }); 
     return $(this).html('<p>' + someVar1 + someVar2 + someVar3 + '</p>'); 
    } 
    }; 
}) (jQuery); 

而且裏面test_ajax.php PHP代碼是:

<?php 
if(isset($_POST['a']) AND !empty($_POST['a'])) { 
    $_something = array(
        'a'=> $_POST['a'], 
        'b'=> $_POST['b'], 
        'c'=> $_POST['b'] 
        ); 
    echo json_encode($_something); 
} 
?> 

現在,當我用我的jQuery的功能是這樣的:

$('#someDiv').multiSelect(1,1,'user'); 

函數在$。(ajax)方面,不會返回任何內容,也不會返回任何內容(我創建的只是爲了查看傳入函數的內容)r eturns「11user」。

如果我用上面這樣的代碼:

$(function() { 
    var dataString = 'a=' + 1 + '&b=' + 1 + '&c=user'; 
    $.ajax({ 
      type:  "POST", 
      url:  "test_ajax.php", 
      data:  dataString, 
      dataType: 'json', 
      success: function(data) { 
       var a1 = data['a']; 
       var b1 = data['b']; 
       var c1 = data['c']; 
       $('#someDiv').html('<p>' + a1 + b1 + c1 + '</p>'); 
      } 
     }); 
}); 

它從test_ajax.php腳本獲取數據。所有這些都很簡單,只是爲了解決問題,然後我將構建複雜的PHP腳本,它將完成數據庫的工作。

我猜我正在做一些錯誤的變量(本地/全局)或不正確的jQuery函數鏈接。

編輯:因爲我會在不同的菜單上多次重複這個操作,函數使更多的邏輯,然後重複整個代碼。

任何幫助,將不勝感激。

回答

1

我想你的意思是,這條線你$.ajax調用中不起作用:

return $(this).html('<p>' + a1 + b1 + c1 + '</p>'); 

這是因爲this,在success隨叫隨到,不指向DOM對象。它指向一個包含AJAX調用設置的對象。

您需要使用context財產在你的AJAX調用,使this意味着你希望它是什麼意思:

$.ajax({ 
     type:  "POST", 
     url:  "test_ajax.php", 
     data:  dataString, 
     dataType: 'json', 
     context: this, 
     success: function(data) { 
      var a1 = data['a']; 
      var b1 = data['b']; 
      var c1 = data['c']; 
      return $(this).html('<p>' + a1 + b1 + c1 + '</p>'); 
     } 
    }); 
+0

謝謝你們(有另一篇文章中有相同的答案),它的工作就像一個魅力; ) – user1410973