$ .getJSON无效

时间:2011-05-14 14:07:05

标签: jquery getjson

我在jQuery中搜索相关主题。但我没有看到任何方法来解决我的问题。

$(document).ready(function(){
    $("#inputForm").submit(function(event){
        $(":text").each(function() {
            var inputText = $(this).val();
            var userList = [];
            var weblink = 'http://test.com';

            // problem is from here.
            $.getJSON(weblink, function(data){
                alert(weblink); // this statement doesn't show up
                $.each(data, function(entryIndex, entry){
                    userList.push(entry['from_user']);
                });
            });
            alert(userList);
        });
     });
});

这里有四个问题:

  1. 为什么第一个警报('weblink')没有出现。
  2. 为什么此代码无法从网站
  3. 获取json数据
  4. 此代码的目标是从json文件获取from_user标记并存储到userList数组中。
  5. “$ .each(data,function(entryIndex,entry){”语句中的变量,该函数有两个输入参数,一个是entryIndex,另一个是entry,我很奇怪这两个参数是针对什么的?以及如何我可以使用这两个参数吗?
  6. 任何人都可以帮我解决这个问题。我在这里待了一天。 非常感谢你。

5 个答案:

答案 0 :(得分:15)

那里有几个问题:

  1. getJSON执行ajax请求。 Ajax请求受Same Origin Policy的约束。除非您的页面是从http://test.com(或其他一些警告)加载的,否则它将无效。你可能正在寻找JSON-P(jQuery也支持),只要服务器支持它。

  2. getJSON与所有ajax请求一样,默认为异步,因此您的第二个警报(带有用户列表)将在之前发生请求完成。虽然你可以使ajax请求同步,但这是一个非常糟糕的主意(在请求期间锁定大多数浏览器的UI)。相反,只需在回调中收到用户列表后再使用用户列表,而不是尝试在调用getJSON的函数中使用它。

  3. 编辑:您在下面说过,您正在尝试使用Twitter搜索API。该API 支持支持JSON-P,因此如果您使用JSON-P来执行请求,它应该可以正常工作。 e.g:

    $(document).ready(function(){
        $("#inputForm").submit(function(event){
            $(":text").each(function() {
                var inputText = $(this).val();
                var userList = [];
                var weblink = 'http://search.twitter.com/search.json?q=&ands=google';
    
                // problem is from here.
                $.ajax({
                    url:        weblink,
                    dataType:   "jsonp", // <== JSON-P request
                    success:    function(data){
                        alert(weblink); // this statement doesn't show up
                        $.each(data.result, function(entryIndex, entry){ // <=== Note, `data.results`, not just `data`
                            userList.push(entry['from_user']); // <=== Or `entry.from_user` would also work (although `entry['from_user']` is just fine)
                        });
                        alert(userList); // <== Note I've moved this (see #2 above)
                    }
                });
            });
         });
    });
    

    ...但是你肯定不想为表单中的每个文本字段做那个吗?

    Here's a live example但没有表格(只做一个请求,而不是每个字段的请求)。

答案 1 :(得分:4)

只需添加到链接

即可
&callback=?

?callback=?

(如果它是第一个也是唯一的GET变量) 这将使您调用JSONP调用,这与同源策略没有问题。

答案 2 :(得分:1)

不确定但不需要获取参数?试试这个:

$.getJSON(weblink, {}, function(data){

答案 3 :(得分:1)

您使用的是MVC平台吗? 显然,默认情况下,MVC 2.0会阻止对返回JsonResult的操作的GET请求。 退房:

http://mhinze.com/2010/04/13/json-hijacking-in-asp-net-mvc-2/

升级使用.getJSON调用将数据从MVC Controller拉到View(通过jquery / javascript)&amp;无法弄清楚为什么他们没有工作我尝试了不同版本的jquery没有运气,然后我找到了上面的链接。我改为POST了(并且稍微改变了从Controller发送数据的方式 - 使用了字典)并让它工作 - 终于!!

祝你好运! JayD

答案 4 :(得分:0)

我想补充另一个原因,为什么jQuery.getJSON()可能无法在IIS for Windows下的开发环境中按预期响应。

按照此处提供的所有步骤,我无法从* .json文件中获取任何数据,只有当我将扩展名更改为* .js时,才会返回响应状态

{"status"="404", "statusText"="Not Found"}

然后我记得在IIS中有一些未指定的MIME /类型。为扩展名为.json的文件添加MIME / Type application / json解决了我的问题。

For information how to add MIME/types on iis7.