在JQuery中调用Web服务并将返回的Json分配给JS变量

时间:2012-05-23 08:08:55

标签: javascript jquery json web-services

这是我第一次尝试使用JQuery,Json和调用Web服务..所以请在这里请耐心等待。

我需要使用JQuery调用webserivce,然后返回一个Json对象,然后我想将其保存为javascript变量。我试过写一些东西。我只需要有人确认这确实是你做的。在我实例化之前,可能会弄乱公司服务器上的某些内容。无论如何,这里是:

var returnedJson = $.ajax({
    type: 'Get',
    url: 'http://172.16.2.45:8080/Auth/login?n=dean&p=hello'
});

就是这样,用JQuery调用web服务并将返回的jsonObject分配给javascript变量。任何人都可以证实这是正确的吗?

提前致谢!

3 个答案:

答案 0 :(得分:1)

  

任何人都可以确认这是正确的吗?

这取决于您存储此脚本的域。由于浏览器内置same origin policy限制,您无法发送跨域AJAX请求。这意味着如果服务此脚本的页面未托管在http://172.16.2.45:8080上,则此查询将无效。确保您不违反此政策的最佳方法是使用相对网址:

$.ajax({
    type: 'Get',
    url: '/Auth/login?n=dean&p=hello'
});

对于相同的源策略限制,有几种解决方法,但可能需要您修改您尝试使用的服务。这是一个nice guide,它涵盖了一些可能的解决方法,如果您需要执行跨域AJAX调用。

您的代码还有另一个问题。您已将$.ajax调用的结果分配给某个returnedJson变量。但这不是AJAX的工作方式。 AJAX是异步的。这意味着$.ajax函数将在请求继续在后台执行时立即返回。一旦服务器完成处理请求并返回响应,结果将在您需要订阅的success回调中可用,并且将自动调用:

$.ajax({
    type: 'Get',
    url: '/Auth/login?n=dean&p=hello',
    success: function(returnedJson) {
        // use returnedJson here
    }
});

关于您的代码的另一个评论:您似乎正在调用执行身份验证并发送用户名和密码的Web服务。为避免通过网络以明文形式传输此信息,强烈建议使用SSL。

答案 1 :(得分:1)

var returnedJson = $.ajax({
    type: 'Get',
    url: 'http://172.16.2.45:8080/Auth/login?n=dean&p=hello'
});

如果你这样做returnedJson将是一个XHR对象,而不是你所追求的json。您希望在成功回调中处理它。像这样:

$.ajax({
    // GET is the default type, no need to specify it
    url: 'http://172.16.2.45:8080/Auth/login',
    data: { n: 'dean', p: 'hello' },
    success: function(data) {
         //data is the object that youre after, handle it here
    }
});

答案 2 :(得分:1)

jQuery ajax function不会返回数据,而是返回jQuery jqHXR object

您需要使用成功回调来处理数据,并且还要处理与Darin提到的相同的原始策略。