Javascript 使用jquery调用Rest WS成功,但没有结果

Javascript 使用jquery调用Rest WS成功,但没有结果,javascript,jquery,html,rest,Javascript,Jquery,Html,Rest,在使用HTML和javascript网页调用Restful WS时,我遇到了一个问题 这是我的代码: $.ajax({ type: "GET", dataType: "script", crossDomain: true, url: "http://localhost:8013/publicationservice/lista",

在使用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和消息:“success”。但是Rest-WS的方法返回一个字符串。问题是,当我打印“xhr”时,我得到了对象数据。但当我打印responseText属性时,它会显示undefined。但是当我在chrome控制台和firefox firebug中进行调试时,在“网络”选项卡中,我会看到响应,结果是一个字符串(这恰好是一个JSON与JSONP一起工作。那么为什么我不使用数据类型JSON或JSONP呢?因为它会给我一个错误,但当我将数据类型设置为脚本时,它可以正常工作)。但这是主要的问题,我无法获取字符串的值,这是我完成应用程序所需的值。 我尝试了$ajax调用的所有可能参数,但没有成功。如果有人能帮助我,我将非常感激。提前感谢。

将脚本设置为会告诉jquery以javascript应用程序代码的形式执行响应,我认为这在您的情况下是不正确的

如果在将数据类型设置为json时出现错误,这通常是因为响应未通过json验证。有些在严格程度上有所不同,例如:

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

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

{
     "key" : "value"
}

您似乎遇到了同源安全策略。无论您是从同一主机还是其他主机加载web服务,脚本都将加载,但其他数据类型受到限制。了解更多信息:以及

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

假设脚本从
http://www.example.com
,然后让
localhost:8013
服务器上的web服务返回标题:

Access-Control-Allow-Origin: http://www.example.com
这将允许现代浏览器跨源访问您的web服务。请注意,较旧的浏览器不会实现这一点,您不应该依赖它

只要您有权更改web服务的输出,我建议您使用以下替代方法:

另一种克服同源限制的方法是更改web服务以返回正确的JSONP,这意味着在web服务响应中包含变量赋值或函数调用。让我们假设您的web服务意味着返回
{“status”:“Green”,“options”:{“alpha”:true,“bravo”:null}
,然后让它发送:

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


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

尝试
success
而不是
complete
。我已经尝试过了,当我使用success时,我的xhr返回“undefined”,它甚至不返回对象。不管怎样,谢谢你的快速回答。问题是,我已经尝试了两种形式,并且两种形式都得到了完全相同的结果。我听说jquery中有一个$jsonp函数。但是我在寻找信息,我还没有找到任何东西。还有其他方法调用我的rest ws吗?谢谢您的快速响应。我不太明白你指的是什么。我试过Callback功能,但也不起作用(.我对这种技术非常陌生。让REST WS以以下格式返回数据:
callbackFunction({“status”:“Green”,“options”:{“alpha”:true,“bravo”:null})
然后在$.ajax调用
window.callbackFunction=函数(数据){console.log(数据);}之上创建一个函数
感谢您的回复。问题是我只允许修改包含javascript和jquery的html。我不允许修改其余内容。对于要求我进行的开发,restful ws必须返回json格式的字符串。对json的调用过去类似于:var script=document.c创建('script');script.src=”“document.body.appendChild(脚本);我应该更改为返回字符串的restful ws。仅允许在我的html中进行更改:(感谢SSORY的超长延迟…必须打开stackoverflow的电子邮件通知…如果您无法更改web服务器响应的格式,并且它只返回纯JSON,并且您必须从不同的主机+端口检索数据,那么它将无法工作。您动态添加脚本标记的旧方法不受限制对于同一来源策略,这就是它以旧方式工作的原因。如果您的雇主/客户已经在更改其服务器的工作方式,并且他们不希望使用JSONP,那么他们必须添加CORS头以使其工作。或者从同一服务器提供您的脚本!
callbackFunction( { "status": "Green", "options": { "alpha": true, "bravo": null } }  )