无法从web服务获得有效响应

问题描述:

我目前正在开发Web服务的Web前端。我使用jQuery 1.5.1作为JS-Framework和Firebug进行调试。无法从web服务获得有效响应

首先,我测试了Firefox扩展“REST Client”的Web服务。 有下列的请求是成功的:

{"requestUrl":"http://localhost:8080/Foobar/rest/goods?label=Schro","requestMethod":"GET","requestBody":"","headers":["accept","application/json"]} 

现在,我想重现一个jQuery UI自动完成的背景下,这个请求()方法:

$("#autocompleteTest").autocomplete({ 
    source: function(request, response) { 
     $.ajax({ 
      url: "http://localhost:8080/Foobar/rest/goods/", 
      dataType: "json", 
      data: { 
       label: $("#autocompleteTest").val() 
      }, 
      headers: {'accept':'application/json'}, 
      error: function(jqXHR, textStatus, errorThrown) { 
       log(textStatus + "," + errorThrown); 
       log(jqXHR); 
      }, 
      success: function(data) { 
       console.log("bla:" + data); 
       response($.map(data, function(item) { 
        return { 
         label: item.label + " # " + item.id, 
         value: item.id 
        } 
       })); 
      }    
     }); 
    }, 
     // [...] 

我把这个配方从jQuery UI自动完成demo

然而,这触发错误事件。萤火虫说:

GET http://localhost:8080/Foobar/rest/goods/?label=Schrott - 200 OK 16ms 
Antwort-Header 
Server Foobar-Optimizer 
Content-Type application/json;charset=UTF-8 
Transfer-Encoding chunked 
Date Wed, 09 Mar 2011 10:50:03 GMT 
Anfrage-Header 
Host localhost:8080 
User-Agent Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0b12) Gecko/20100101 Firefox/4.0b12 
Accept application/json 
Accept-Language de-de,de;q=0.8,en-us;q=0.5,en;q=0.3 
Accept-Encoding gzip, deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Keep-Alive 115 
Connection keep-alive 
Origin null 

错误jqXHR说:

[Object { readyState=0, status=0, statusText="error"}] 

和响应报头是空的。

除了不同的结果,这两个请求在我眼中看起来完全相同。 我将不胜感激任何建议。谢谢。

更新:解决方案

这是一个跨域策略问题。我不知道这种行为。解决方案是将$ .ajax数据类型从“json”更改为“jsonp”。这是覆盖这些策略并访问远程Web服务的优雅方法。

当然,Web服务必须能够处理这种JSON“填充”。

的其他可能性一堆就是这里所说的:http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide

+0

你有没有尝试删除从“货物”尾部的反斜杠? – 2011-03-09 11:49:28

+0

是的,结果是一样的:“错误”,并没有进一步的信息给出。从Web服务本身的控制台日志看起来很顺利:我不知道确切的实现,但它看起来好像它已发送请求的对象 – Weizen 2011-03-09 12:02:34

我可以回答我自己这样一个问题:这是一个跨域安全政策问题。我没有意识到这种行为。

以下链接包含了一堆的适用方法:

http://usejquery.com/posts/9/the-jquery-cross-domain-ajax-guide