0

使用 HTML 和 javascript 网页调用 Restful WS 时遇到问题。

这是我的代码:

$.ajax({ 
               type: "GET",
               dataType: "script",
               crossDomain: true,
               url: "http://localhost:8013/publicationservice/lista",              
               complete: function (xhr) {
                   console.log(xhr);
                   console.log("======");

               },
            }); 

这就是我调用服务的方式。它返回一个 readyState:4、responseCode:200 和消息:“成功”。但是我的 Rest WS 的方法返回一个字符串。问题是,当我打印“xhr”时,我得到了对象数据。但是当我打印 responseText 属性时,它显示未定义。但是,当我在 chrome 控制台和 firefox firebug 中进行调试时,在“网络”选项卡中,我看到我的结果为字符串的响应(这恰好是与 JSONP 一起工作的 JSON。为什么我不使用 dataType json 或 jsonp 那么? 因为它给了我一个错误,但是当我将数据类型设置为脚本时它工作正常)。但这是主要问题,我无法获得完成应用程序所需的 String 的值。我已经尝试了 $ajax 调用的所有可能参数,但没有成功。如果有人可以帮助我,我会很感激的。提前致谢。

4

2 回答 2

0

dataType设置为script告诉 jquery 将响应作为 javascript 应用程序代码执行,我认为这在您的情况下是不正确的。

如果在将 dataType 设置为json时遇到错误,这通常是因为响应未通过 json 验证。一些验证器的严格程度各不相同,例如:

此代码在某些解析器中未通过 json 验证:

{
     key : "value"
}

相反,您必须将键和值都用引号括起来,如下所示:

{
     "key" : "value"
}
于 2013-02-08T20:28:11.817 回答
0

您似乎遇到了同源安全策略。无论您是从同一主机还是另一个主机加载 Web 服务,脚本都会加载,但其他数据类型受到限制。阅读更多:同源策略跨源资源共享

解决此问题的一种方法是添加 CORS 标头,以便您可以使用json数据类型检索数据,甚至text.

假设您的脚本从 运行http://www.example.com,然后让服务器上的 Web 服务localhost:8013返回标头:

Access-Control-Allow-Origin: http://www.example.com

这将使现代浏览器可以跨域访问您的 Web 服务。请注意,较旧的浏览器没有实现这一点,您不应该依赖它。

只要您有权更改 Web 服务的输出,我会推荐以下替代方案:

另一种克服同源限制的方法是更改​​您的 Web 服务以返回正确的JSONP,这意味着在您的 Web 服务响应中包括变量赋值或函数调用。假设您的网络服务意味着返回{ "status": "Green", "options": { "alpha": true, "bravo": null } },那么您将让它发送:

window.var1 = { "status": "Green", "options": { "alpha": true, "bravo": null } }

或者:

callbackFunction( { "status": "Green", "options": { "alpha": true, "bravo": null } }  )

在后一种情况下,您必须callbackFunction()在运行$.ajax命令之前进行定义。在前一种情况下,您最终会得到一个污染全局命名空间的变量。

于 2013-02-08T20:37:10.147 回答