我在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); }); }); });
这里有四个问题:
>为什么第一个警报(‘weblink’)没有出现.
>为什么此代码无法从网站获取json数据
>此代码的目标是从json文件获取from_user标记并存储到userList数组中.
>变量在“$.each(data,entry){”语句中,该函数有两个输入参数,一个是entryIndex,另一个是entry,我很奇怪这两个参数是针对什么的?我该怎么办?使用这两个参数.
任何人都可以帮我解决这个问题.我在这里待了一天.
非常感谢你.
解决方法
那里有几个问题:
> getJSON执行ajax请求. Ajax请求受Same Origin Policy的约束.除非您的页面是从http://test.com(或其他一些注意事项)加载的,否则它将无效.你可能正在寻找JSON-P(jQuery也支持),前提是服务器支持它.
> getJSON与所有ajax请求一样,默认情况下是异步的,因此您的第二个警报(带有用户列表)将在请求完成之前发生.虽然你可以使ajax请求同步,但这是一个非常糟糕的主意(在请求期间锁定了大多数浏览器的UI).相反,只需在回调中收到用户列表后使用它,而不是尝试在调用getJSON的函数中使用它.
编辑:您在下面说过,您正在尝试使用Twitter搜索API.该API确实支持JSON-P,因此如果您使用JSON-P来执行请求,它应该可以正常工作.例如.:
$(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,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但没有表格(只做一个请求,而不是每个字段的请求).