我试图从jquery调用跨域调用。函数进入错误部分并显示错误消息" alertResponse未被调用"。我正在使用Jquery版本" jquery-1.6.2"我可以使用" http:// localhost:123 / Home / CheckSession"在浏览器中查看操作checkSession的结果。同样在visual studio调试器中,浏览器加载了从上面的url返回的实际结果。但是我无法从jquery中获取值。
请在下面找到Jquery代码: Jquery代码位于不同的域中 - http://localhost:7451/TestPage.aspx
$(document).ready(function () {
SetActionItemCount();
});
function SetActionItemCount() {
var URL = "http://localhost:123/Home/CheckSession";
function alertResponse(data, status) {
alert("data: " + data + ", status: " + status);
}
$.ajax({
url: URL,
dataType: 'jsonp',
jsonp: 'callback',
jsonpCallback: 'alertResponse',
success: function (jsonp) {
alert(jsonp);
},
error: function(xhr, status, error) {
alert("error");
}
});
}
public JsonResult CheckSession()
{
string status = string.Empty;
status = "test data";
return Json(new { status },JsonRequestBehavior.AllowGet);
}
我不确定我在这里失踪的是什么。 此外,当我运行带有调试器的jquery附加到localhost:32088时,我在checksession操作方法中得到调试器,它确实返回值。 但是我无法在jquery中获得该值。
我在尝试网址时收到的输出" http:// localhost:123 / Home / CheckSession"在浏览器中 {" status":"测试数据"}
非常感谢任何帮助。
答案 0 :(得分:0)
我认为这里存在一些混淆:
jsonpCallback
不应该提供命名函数作为成功回调。它只指定jQuery将用于处理JSON响应的回调函数的内部名称 - 该函数的实际代码由success
参数指定。据我所知,使用它的主要原因是支持更好的客户端缓存 - 您可能不希望在CheckSession
脚本中使用。因此,我会完全删除jsonCallback
并将alertResponse
代码放入success
函数。
您的服务器端脚本需要在代码<callbackName>(...);
中包装JSON响应,其中<callbackName>
是请求URL中提供的函数的名称,...
是你的JSON。因此,如果请求为/Home/CheckSession?callback=alertResponse
,则您的回复应如alertResponse(<JSON>);
。看起来你只是发送了没有包装代码的JSON。
jsonp: 'callback'
是不必要的(这是默认设置)。
答案 1 :(得分:0)
您需要从服务器返回JSONP,而不是JSON。请查看following blog post,其中说明了如何编写自定义JsonpResult
操作结果以在控制器操作中使用。这是一个similar post。