2011-06-28 79 views
5

有一个简单的自动完成框(jQuery UI),它从Web服务获取其源。该代码是类似下面的东西:Jquery JSONP请求获取200响应数据,但标志错误

var autocompleteOptions = { 
    source = getDataFromService, 
    minLength: 3 
}; 

var getDataFromService = function(request, response) { 
    var ajaxOptions = { 
     url: "http://myservice:1234/somedata/", 
     dataType: "jsonp", 
     data: "someVariable = " + request.term, 
     success: function(data) { alert("data"); }, 
     error: function(xhr, description, error) { alert("failed"); } 
    }; 

    $.ajax(ajaxOptions); 
} 

$(someSelector).autocomplete(autocompleteOptions); 

在小提琴手,甚至在Firefox的萤火虫面板来看,我可以看到,JSON返回正确,服务器的响应是200。我甚至已经检查了创建JSONP脚本片段,其中也包含正确的JSON。但它总是碰到错误功能而不是成功的。

我也尝试过使用complete,并从xhr手动获取数据,但是responseText和responseXml都是未定义的。包含的错误说解析错误,但它似乎在语法上是正确的JSON,因为萤火虫面板和提琴手都显示它很好。

HTTP/1.1 200 OK 
Server: ASP.NET Development Server/9.0.0.0 
Date: 28 Jun 2011 11:17:04 GMT 
X-AspNet-Version: 2.0.50727 
X-AspNetMvc-Version: 2.0 
Cache-Control: private 
Content-Type: application/json; charset=utf-8 
Content-Length: 29 
Connection: Close 

[{"id":"1", "somevar":"hello"}] 
+1

你能在问题发布JSON?如果你得到一个“解析错误”,必须有一个原因... – Pointy

+0

如果它有帮助,将原始输出添加到我的原始帖子 – somemvcperson

+0

当AJAX呼叫完成时,你在警告框中看到什么?还是不警觉? – MoarCodePlz

回答

5

这JSON是不正确的,

[{"id":"1", somevar:"hello"}]

需求是

[{"id":"1", "somevar":"hello"}]

JSON需要双引号。

http://jsfiddle.net/robert/Y6ypV/

值可以是在双引号的字符串或数字,或真或假或为空,或物体或阵列。这些结构可以嵌套。

采取来源:http://www.json.org/

+0

对不起,错字,只是复制打字从其他机器,它确实包含在另一台机器上的数据周围的报价。将更新我的文章。 – somemvcperson

+0

http://jsonlint.com/是伟大的json验证程序 - 今天一直在使用它:-) –

+0

我不知道有一个jsonlint,我在我的构建管道中使用jslint ...将去检查那里的json。 .. *编辑*有效的json – somemvcperson