我在IE8(是的,不幸的是,这是我的工作组卡住的版本),Firefox和Chrome中获得ajax调用和响应的正确工作时间。
我将ajax请求转到后端上的单个PHP脚本。因为我过去经历过奇怪的问题,IE会突然抱怨/表现得好像我们的一些内部/内部网服务器实际上是"跨域",我确保PHP脚本将数据对象包装成回调函数:
echo $callback_name.'('.$jsondata.');';
(但是,所有来自前端的ajax请求都传递相同的回调名称,只是为了尽量保持简单:jsonpCallback)
我的前端请求都遵循相同的格式:
$.ajax({
type: 'GET',
url: 'ajax_fetcher.php',
data: { action: 'fetchexecmsg', incident_id: incident_id_number},
dataType: 'jsonp', // doing this because it should avoid cross-domain issues
jsonp:'callback_name',
jsonpCallback: 'jsonpCallback',
success: function(data){
console.log("Ajax call to fetchexecmsg was successful.");
Parse_JSON_object_into_Exec_Msg_Div(data);
}
});
我正在做大多数构建/测试与Chrome。所以,今天,我决定测试一下Firefox和IE8。令我惊讶的是,Firefox抱怨"jsonpCallback"不是一个实际的函数??
TypeError: jsonpCallback is not a function (red text in the console)
我的理解是,如果我已经预定义了一个"成功"函数,那么这个函数就不需要实际存在了吗?
所以,我把它全局作为一个空函数…现在火狐开始抱怨了:
Error: jsonpCallback was not called
,紧接着是一个ajax解析错误,其中jqXHR。responseText = undefined。我现在看到Chrome正在记录parseerror -> undefined。
有人能提供一些指导吗?我想我现在关注的应该是这个jsonpCallback。我认为我需要从后端返回的数据,以便"愚弄"浏览器,使其认为它正在获取Javascript而不是来自某个远程服务器的数据。
然后,在前端,我需要在ajax请求中设置jsonp和jsonpCallback变量。但我认为一个实际的回调函数,定义与jsonpCallback变量,是不必要的?
谢谢!
Dave,从你为jQuery.Ajax设置的选项中删除"jsonpCallBack"键。
从http://api.jquery.com/ajax看到,
最好让jQuery生成一个唯一的名称,因为这将使它更容易管理请求,提供回调和错误处理。