转发json回应

时间:2012-07-22 02:13:53

标签: jquery ajax json

我有一个简单的html文件。它访问url1并成功解析json响应。

客户 - > URL1 - >对客户的回应

我在html中修改了我的代码并调用了URL2

客户 - > URL2 - > URL1 - >对URL2的响应 - >对客户的回应

我评论了url1并调用了url2。 url2是一个简单的servlet,它调用url1并获取响应。 servlet将相同的响应返回给客户端,但这次ajax / jquery返回解析错误。当我发出警报(request.responseText)时,它与URL1返回的响应完全匹配。

$.ajax({   
//url: "http://abc1.com", // Line 1  
  url: "http://abc2.com", // Line 2   
  data: {param1, param2},    
  dataType: "jsonp",            
  type: "GET",  
      async:false,  
    success: function(parsed_json) {  
            alert("Success");           
        },
        error: function (request, status, error) {  
            alert("Error" + error);
            alert(request.responseText);
        }

Servlet只是一个层,它将输入流的内容复制到输出流。

InputStream input = new URL(url).openStream();
resp.setContentType("application/json"); // Apache commons IOUtils to copy IOUtils.copy(input, resp.getOutputStream());
resp.getOutputStream().flush();

我手动验证了json-string-response,它看起来是一样的。 可能是什么问题呢 ?

2 个答案:

答案 0 :(得分:1)

以下是一个可能的问题:我注意到dataTypejsonp,与json不同。如果请求在JSON-P期待时以JSON的形式返回,jQuery可能会抛出错误。将dataType更改为json会改变什么吗?

顺便说一下,区别在于:

JSON-P主要用于与远程网站进行通信。由于浏览器出于安全原因无法将AJAX请求发送到其他域,因此JSON-P“AJAX请求”实际上会向DOM添加类似的内容:

<script src="http://www.otherwebsite.com/info.js?callback=myCallback"></script>

如果远程站点支持JSON-P,它将返回如下内容:

myCallback({"foo": "bar"})

然后使用来自远程站点的数据调用myCallback函数 - ta da!

如果您说dataTypejsonp,jQuery会自动处理所有这些回调业务,但是,如果您说jsonp将数据包装在一个回调,(据我所知)jQuery会注意到脚本已加载并抛出错误,因为回调从未触发过。

或者它 JSON-P而我只是在喘息。无论如何。以防万一:)

答案 1 :(得分:0)

为此我查了jquery documentation,看来“跨域请求和dataType:”jsonp“请求不支持同步操作”。因此,如果您更改为async:true,您可能会有更多运气。 :)