JSONPCallback函数步入错误

时间:2011-12-14 22:26:19

标签: jquery asp.net-mvc

我试图从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");
                            }
                  });
              }

服务器端MVC操作方法 - 此代码位于" http:// localhost:123 / Home / CheckSession"

    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":"测试数据"}

非常感谢任何帮助。

2 个答案:

答案 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