0

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

CLIENT -> URL1 -> 对客户端的响应

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

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

我评论了 url1 并调用了 url2。url2 是一个简单的 servlet,它调用 url1 并获取响应。servlet 将相同的响应返回给客户端,但这次 ajax/jquery 返回parse error。当我提醒(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,它似乎是一样的。可能是什么问题呢 ?

4

2 回答 2

1

这是一个可能的问题:我注意到dataTypeisjsonp与 不同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!

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

或者也许它JSON-P,我只是在气喘吁吁。反正。以防万一 :)

于 2012-07-22T03:21:12.560 回答
0

我为此查阅了jquery 文档,似乎“跨域请求和数据类型:“jsonp”请求不支持同步操作”。因此,如果您更改为async:true,您可能会有更多的运气。:)

于 2012-07-22T03:29:10.397 回答