【问题标题】:Using JQuery ajax post with JSONP datatype CrossDomain使用带有 JSONP 数据类型 CrossDomain 的 JQuery ajax post
【发布时间】:2013-08-03 16:41:13
【问题描述】:

我正在使用以 JSONP 作为数据类型的 JQuery ajax post 来解决 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({"成功":1});
但我得到了这样的结果:{“成功”:1}

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

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

PS:我必须使用 JSONP 来避免类似错误 access-control-allow-origin not allowed

【问题讨论】:

  • 不使用代理是不可能的。如果您有自己的服务器,则可以在服务器端获取数据并使用回调函数再次提供。

标签: jquery jsonp jquery-callback crossdomain.xml


【解决方案1】:

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

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

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

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

对于Ajax请求,该属性中必须指明回调的同名:

jsonpCallback: 'localJsonpCallback',

【讨论】:

    猜你喜欢
    • 2013-01-11
    • 2012-12-26
    • 1970-01-01
    • 2011-05-29
    • 2013-03-08
    • 2014-02-10
    • 1970-01-01
    • 2010-09-23
    相关资源
    最近更新 更多