我在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);
});
});
});
这里有四个问题:
任何人都可以帮我解决这个问题。我在这里待了一天。 非常感谢你。
答案 0 :(得分:15)
那里有几个问题:
getJSON
执行ajax请求。 Ajax请求受Same Origin Policy的约束。除非您的页面是从http://test.com
(或其他一些警告)加载的,否则它将无效。你可能正在寻找JSON-P(jQuery也支持),只要服务器支持它。
getJSON
与所有ajax请求一样,默认为异步,因此您的第二个警报(带有用户列表)将在之前发生请求完成。虽然你可以使ajax请求同步,但这是一个非常糟糕的主意(在请求期间锁定大多数浏览器的UI)。相反,只需在回调中收到用户列表后再使用用户列表,而不是尝试在调用getJSON
的函数中使用它。
编辑:您在下面说过,您正在尝试使用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解决了我的问题。