0

我正在使用JSONP作为数据类型的 JQuery ajax 帖子来解决CrossDomain
的问题, 这是我的代码实现:

$.ajax({
     statusCode: {
        200: function() {
          alert("page found");
        },
        302: function() {
              alert("page redirect");
            }
      },
      url: "http://exemple.com/j_spring_security_check",
      type: "post",
      dataType: 'jsonp',
      jsonp: false,
      jsonpCallback: 'localJsonpCallback',
      contentType: 'application/json; charset=utf-8',
      data: {ajax: true, username: 'user1', password: 'pass'},
      success: function(){
          alert("success");
      },
      error:function(jqxhr, textStatus, error){
          alert("textStatus : " + textStatus + "\n error" + error);
      }   
    }); 

function localJsonpCallback(data) {
alert("localJsonpCallback : " + data);
}

问题是我收到此消息的错误: errorParsing ,未调用 localJsonpCallback 回调。
我知道为什么我会收到这种消息,因为客户正在参加这样的格式:
localJsonpCallback({"success":1});
但我得到了这样的结果:{“成功”:1}

问题是回调方法没有在服务器中实现,因为这些人知道如何用 spring security 覆盖这个方法。这就是它不被调用的原因。而且我无权访问服务器。

有没有办法在服务器没有实现回调函数的情况下获得 JSONP 响应?

PS:我必须使用 JSONP 来避免这种情况,例如错误access-control-allow-origin not allowed

4

1 回答 1

0

我在服务器端解决了这个问题,所以当我调用 Web 服务时,我添加了一个属性,其中包含我想要捕获的回调函数的名称。并且 Web 服务必须返回这样的响应FUNCTION_NAME({JSON_STRUCTURE})

所以正如我在问题中提到的,当你提出请求时。放置一个属性以被 WebService 识别并在响应中返回它。例如,如果我想获取联系人列表,我会这样做:

http://example.com/getContacts?callbackName=getcontactsCallback

响应必须是这样的:getcontactsCallback({name:john , job:developer})

对于 Ajax 请求,必须在此属性中指示相同的回调名称:

jsonpCallback: 'localJsonpCallback',

于 2013-12-16T12:18:45.477 回答