2010-10-24 69 views
1

如果我想單獨拿出我的AJAX success功能,使得它在我的<script>別處定義,它必須是

$(document).ready(function() 
{ 

段內或可沿與非的jQuery JavaScript函數定義?

$.ajax(
    { 
    url: '/load_prayer', 
    cache: false, 
    dataType: 'json', 
    type: 'POST', 
    data: ({ 'prayerId' : prayerId }), 
    success: function(data) 
    { 
     $('#prayer_date').html(data.Date); 
     console.log(data); 
    }, 
    error: function(e, xhr) 
    { 
     console.log(e); 
    } 
    }); 

我不想把它定義調用內部ajax的原因是它最終會成爲一個大的功能,這將是混亂,如果它混在其他ajax調用參數讀取。

例如,將這項工作:

$.ajax(
{ 
    url: '/load_prayer', 
    cache: false, 
    dataType: 'json', 
    type: 'POST', 
    data: ({ 'prayerId' : prayerId }), 
    success: handlePrayer(data), 
    error: function(e, xhr) 
    { 
     console.log(e); 
    } 
}); 

handlePrayer(data) 
{ 
    $('#prayer_date').html(data.Date); 
    console.log(data); 
} 

回答

0

我相信你可以同時定義Ajax調用和onready範圍之外的功能。

4

只要該函數在$ .ajax被調用之前被加載,它就可以工作。這意味着它可以可以$(document).ready(...)之外。

有一個例外:所有需要訪問的變量都需要在該成功函數之外。以下ajaxCallWorked()功能將能夠訪問outside,但不能inside

var outside; 

function ajaxCallWorked(data) { 
    ... 
} 

$(document).ready(function() { 
    var inside; 
    $.ajax({ 
     ... 
     success: ajaxCallWorked, 
     ... 
    }); 
} 
+0

對於指出「ajaxCallWorked」把功能僅僅是一個函數對象(就像一個函數表達式的表達式這是所有在這裏解釋:http://jibbering.com/faq/notes/closures/(某處) – 2010-10-24 22:41:45

+0

因此,如果'ajaxCallWorked'定義在$(document).ready(.. .',它可以在內部訪問,'$ .ajax()'調用也可以訪問它? – 2010-10-24 22:43:22

10

你必須改變它,使它只有函數名。像這樣:

$.ajax(
{ 
    url: '/load_prayer', 
    cache: false, 
    dataType: 'json', 
    type: 'POST', 
    data: ({ 'prayerId' : prayerId }), 
    success: handlePrayer, 
    error: function(e, xhr) 
    { 
     console.log(e); 
    } 
}); 

而且你需要一個這樣聲明

function handlePrayer(data) 
{ 
    $('#prayer_date').html(data.Date); 
    console.log(data); 
} 
+0

@肯,如果這些解決您的問題,然後請接受其中之一:) – 2010-11-02 18:48:24