需要帮助让Ajax工作:jsonpCallback和php后端


Need help getting Ajax to work: jsonpCallback and php on the backend

我在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生成一个唯一的名称,因为这将使它更容易管理请求,提供回调和错误处理。