2015-06-20 58 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的一点点。 –