2013-05-17 14 views
1

我正在使用jQuery调用JSON webservice,它工作正常,除了我调用的URL需要隐藏在源代码中。我试图使用本地页面作为$ .getJSON的url参数,然后该页面将重定向到JSON服务。如果我在浏览器中调用页面,它会正确重定向并显示JSON数据,但是$ .getJSON并不会提取它。jquery getJSON从URL和隐藏源中的URL

$.getJSON("Customer.html", function (result) { 

Customer.html通过以下方式重定向来调用JSON。

<script> 
     window.location = "http://MYJSONURL"; 
</script> 

任何其他的想法或建议,将不胜感激。

+6

这是根本不可能的调用Web服务。任何人都可以看到开发人员工具中涉及的每个URL。 – SLaks

+3

使用服务器端代码。 – SLaks

+0

我试图避免服务器端。我试着将它作为会话变量或会话变量中的数组对象,但也显示在源代码中。 –

回答

0

麻烦的是$.getJSON调用期望找回一些JSON(这只是一些文本)。您的Customer.html文件正在发送一小段JavaScript,当在浏览器中运行将浏览器重定向到您想要的任何位置。

getJSON试图解释Customer.html的JSON,因为它只是没有制定出它刚刚获得了一些HTML,更不用说工作,如果它收到一个浏览器将如何表现的能力,它会失败它。

您是否试过从Customer.html发送重定向标头?

但是,如果页面不是从Web服务器的服务器,你不能这样做。 因此,而不是尝试这个办法:

变化Customer.html这样:

{ 
    "url": "http://MYJSONURL" 
} 

然后更改您的代码这2阶段的程序读取客户页面的URL,然后得到JSON的最后一块从那里:

$.getJSON("Customer.html", function (urldata) { 
    var url = urldata.url; 
    $.getJSON(url, function (result) { 

    <your present code here> 

} 

当然,最好将Customer.html的名称更改为Customer.json。

+0

这似乎工作,但在一个侧面说明我解决了只是把我的功能放在一个.js文件更简单的解决方案。我认为这两种方式都是相同的,这意味着url仍然可以获取,但在页面源中不可见。感谢Annabel的回复。 –

+0

当然,您的JavaScript文件也会显示URL *,该文件也是源页面。在Chrome等大多数浏览器中,您可以**查看源代码**,然后指向脚本文件的链接将显示为您单击查看JavaScript的超链接。无论您使用哪种方法来尝试和隐藏网址,网页精明的个人都可以访问它,他们可以阅读您的JavaScript以了解如何获取URL。或者他们可以使用像** Fiddler2 **这样的工具来显示浏览器请求的每个URL,但它们都是隐藏的。 – Annabel

0

好吧,你可以直接这样

$(document).ready(function() { 
     $.ajax({ 
     type: "POST", 
     url: "RSSReader.asmx/GetRSSReader", 
     data: "{}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(data) { 
      var items = []; 
      $.each(data, function(key, val) { 
      items.push('<li id="' + key + '">' + val + '</li>'); 
      }); 

     $('<ul/>', { 
      'class': 'my-new-list', 
      html: items.join('') 
      }).appendTo('body'); 
     } 
     }); 
    }); 
+0

是的,虽然这样的工作,就像$ .getJSON(“serviceurl”,功能(结果){});也可以工作,但是这两个选项都会显示URL。 –