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

需要帮助让Ajax工作:后端的jsonpCallback和php,php,jquery,ajax,Php,Jquery,Ajax,我在IE8(是的,不幸的是,这是我的工作组一直坚持的版本)、Firefox和Chrome中很难让ajax调用和响应正常工作 我将ajax请求发送到后端的单个PHP脚本。因为我过去遇到过一些奇怪的问题,IE会突然抱怨/表现得好像我们的一些内部/内部网服务器实际上是“跨域的”,所以我要确保PHP脚本将数据对象包装到回调函数中: echo $callback_name.'('.$jsondata.');'; (然而,来自前端的所有ajax请求都传递相同的回调名称,只是为了尽量简单:jsonpCall

我在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)
我的理解是,如果我已经预先定义了一个“success”函数,那么该函数就不需要实际存在了

所以,我把它作为一个空函数全局地放进去。。。现在Firefox正在抱怨:

Error: jsonpCallback was not called   
紧接着是一个ajax解析错误,其中jqXHR.responseText=undefined。 现在我看到Chrome也在记录parseerror->undefined

有人能提供一些指导吗?我想我现在的重点应该放在“jsonpCallback”上。我认为我需要从后端返回,以便“愚弄”浏览器,使其认为它是从某个远程服务器获取Javascript而不是数据

然后,在前端,我需要在ajax请求中设置这些jsonp和jsonpCallback变量。但我认为实际的回调函数,正如用jsonpCallback变量定义的那样,是不必要的吗

谢谢

-=Dave=-

Dave,从为jQuery.Ajax设置的选项中删除“jsonpccallback”键

从,

最好让jQuery生成一个唯一的名称,因为这样可以更容易地管理请求并提供回调和错误处理


我有一个相关的问题。。。这可能是根本原因的一部分。。。当基本上没有数据时,PHP后端应该发送什么?现在,我让它发回“jsonpCallback();”好吧,无论如何,我已经让所有三个浏览器停止对我的一个ajax请求出错。(希望我能够调整其他请求并修复它们。):我删除了jsonpCallback函数,该函数是我为响应其中一个浏览器的错误而编写的。然后,我在后端调整了脚本,以便在没有数据时,它不会发送回“jsonpCallback();”,而是发送一个json_编码的数组$msg_object=array('status'=>false);您强制定义jSONPCallback的值有什么原因吗?jQuery通常将其自身设置为避免其自身代码中的冲突。从api.jquery.com/ajax可以读到:最好让jquery生成一个唯一的名称,因为这样可以更容易地管理请求,并提供回调和错误处理。。。。我想我明白你的意思了。”jsonp'=要在GET或POST中传递到后端脚本的变量(对于jsonp回调函数)的“名称”。我为“jsonpCallback”分配了一个值,认为我需要手动分配该值,以便将其传递到后端。你是说这不是,对吧?这是有道理的,因为我刚刚看到了一些奇怪的东西:我把一行代码转储到一个ajax调用中。然而,当我执行该函数时,我有时会看到来自其他ajax请求的对象被打印出来!埃里克,你应该把你的回答作为一个答案,这样我才能相信你。显然,我不能相信你的“评论”。但删除手动分配的“jsonpCallback”键修复了我的问题。(难怪我被我的东西25%的时间都在工作这一事实弄糊涂了!)