2015-06-20 57 views
1

我正在使用回調函數,因爲我希望將數據填充到另一個域上(通過使用我的javascript)。AJAX成功後的Callaback函數

/* 
* 
* Description: This function is AJAX loader for Footer and processing Callback function as a response" 
* 
* @Param :actionName : The URL to be called   
* 
* */ 

function ajaxFooterLoader(actionName) { 
    $.ajax({ 
     type: 'GET', 
     url: "http://localhost:8080/ajax/ttsGetContent.do?languageCode=en&productType=package&pageId=packageSearchResults&format=jsonp&includes=FOOTER", 
     dataType: "json", 
     success: function(response) { 
      //WHAT SHOULD I DO??? 
     }, 
     error: function(jqXHR, exception) { 
      if (jqXHR.status === 0) { 
       alert('Not connect.\n Verify Network.'); 
      } else if (jqXHR.status == 404) { 
       alert('Requested page not found. [404]'); 
      } else if (jqXHR.status == 500) { 
       alert('Internal Server Error [500].'); 
      } else if (exception === 'parsererror') { 
       alert('Requested JSON parse failed.'); 
      } else if (exception === 'timeout') { 
       alert('Time out error.'); 
      } else if (exception === 'abort') { 
       alert('Ajax request aborted.'); 
      } else { 
       alert('Uncaught Error.\n' + jqXHR.responseText); 
      } 
     } 
    }); 
} 

下劃線,是我通過AJAX我的網址調用後得到響應,我傳遞格式的URL是直接返回了我要調用的函數,即processFooter。

不過,我不明白我應該成功之後做的,所以它直接調用我的函數,它是通過回撥電話從服務器

processFooter({ 
    "copyRight": { 
     "description": null, 
     "id": null, 
     "name": "© 2015 AC", 
     "style": null 
    } 
    }) 

我的功能

URL響應返回: 這是AJAX返回的功能,定義如上AJAX調用

/* 
* 
* Description: This function will process footer 
* 
* @Param :dataFooter : it takes JSON as input 
*    
* 
* */ 
function processFooter(dataFooter) { 
     mergeTemplateFooter(dataFooter); 
} 

請指教我的ajax成功應該如何調用此函數?

在此先感謝

+0

你的服務器似乎返回JSONP,JSON不是。爲什麼? –

+0

是的,它的回調JSONP回調 – user2985842

+0

即使我用jsonp試過,問題是我的函數在成功後會被執行嗎? – user2985842

回答

1

由於服務器返回JSONP,你一定要告訴jQuery的你期望JSONP:

dataType: 'jsonp' 

由於回調名字似乎被硬編碼,你也必須告訴關於它的jQuery。否則,它將生成一個隨機函數名稱。

jsonpCallback: 'processFooter' 

jQuery將自動創建一個函數有這樣一個名字,所以你應該改變success

success: function(response) { 
    mergeTemplateFooter(response); 
}, 

你可以找到在$.ajax documentation的更多信息。


另外要注意,你的error功能將是無用的在這裏,因爲如果你使用JSONP jQuery的不能稱之爲:

錯誤

注意:此處理程序不叫用於跨域腳本和跨域JSONP請求。

+0

是否有可能jsonpCallback可以有兩個功能。例如,如果我的服務器正在返回兩個回調函數,如processFooter和processAboutUs? – user2985842

+0

不,這是不可能的。 JSONP是明確定義的格式,不能有兩個函數調用(如果有的話,它不是JSONP,而是任意的JavaScript)。 –

+0

你可以給我任何詭計,因爲在我的網址包括FOOTER,ABOUT_US這是返回兩個函數processFooter和processAboutUs,我只想打一個電話給服務器 – user2985842

0

首先,你應該只從你的服務器返回的JSON對象:

{ 
    "copyRight": { 
    "description": null, 
    "id": null, 
    "name": "© 2015 AC", 
    "style": null 
    } 
} 

其次,你可以做兩件事情之一,直接發送到您的命名函數:

success: processFooter, 

或(更通常)

success: function(response) { 
    //WHAT SHOULD I DO??? 
    processFooter(response); 
}, 

EV EN更好的擺脫你processfooter()功能,只需使用:

success: function(response) { 
    //WHAT SHOULD I DO??? 
    mergeTemplateFooter(response); 
}, 

最重要的是:

success: function(response) { 
    //WHAT SHOULD I DO??? 
    //Perform your mergeTemplateFooter() code here. 
}, 
+0

'成功:processFooter(response),'不正確。它會*立即調用*'processFooter'。它應該是'success:processFooter'。爲什麼你聲稱把所有東西都放入'成功'將是「最好的」?分離關注是一種很好的模式。 –

+0

在我的理解中,「關注」是爲了獲得並處理頁腳,爲什麼他需要單獨打電話。 –

+0

*「獲取並處理頁腳」*請參閱,並將「獲取」與「處理」分開。這使您可以輕鬆更改如何獲取數據或如何處理數據,而不會影響其他進程。但每個人都有不同的風格來構建他們的應用程序。如果您能提供充分的理由,建議採用不同的方法並沒有錯。但聲稱它是「最好的」僅僅是頂級IMO的一點點。 –