【问题标题】:Not receiving JSONP callback未收到 JSONP 回调
【发布时间】:2013-02-25 00:35:12
【问题描述】:

我正在关注 ASP.NET MVC 和 JSONP 博客文章的示例代码/教程:http://blogorama.nerdworks.in/entry-EnablingJSONPcallsonASPNETMVC.aspx

我已获取代码示例并对其进行了修改以供自己使用。

当我点击页面时,它会触发我的控制器的操作,但 $.getJSON(call, function (rsp).. 根本没有触发。

控制器动作

[JsonpFilter]
public JsonpResult GetMyObjects(int id)
{
    List<MyObject> list = MyDAO.GetMyObjects(id);

    return new JsonpResult
        {
            Data = list,
            JsonRequestBehavior = JsonRequestBehavior.AllowGet
        };
}

HTML 页面

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title></title>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

</head>
    <body>
        <script type="text/javascript">

            var url = "http://localhost/MySite.ContentDelivery/MyController/GetMyObjects/?";


            function getObjects() {
                //
                // build the URL
                //
                debugger;
                var call = url + "id=48&jsoncallback=?";

                //
                // make the ajax call
                //
                $.getJSON(call, function (rsp) {
                    debugger;
                    alert(rsp);
                    if (rsp.stat != "ok") {
                        //
                        // something went wrong!
                        //
                        $("#myDiv").append(
                            "<label style=\"background-color:red;color:white;padding: 25px;\">Whoops!  It didn't work!" +
                            "  This is embarrassing!  Here's what the system had to " +
                            " say about this - " + rsp.message + "</label>");
                    }
                    else {
                        //
                        // build the html
                        //
                        var html = "";
                        $.each(rsp.list.myObject, function () {
                            var obj = this;
                            html += "<span" + obj.Name + "</span> <br />";
                        });

                        //
                        // append this to the div
                        //
                        $("#myDiv").append(html);
                    }
                });
            }

            //
            // get the offers
            //
            $(document).ready(function() {
                alert('go..');
                $(getOobjects);
            });
    </script>
        <div id="myDiv"></div>
    </body>
</html>

tl;dr为什么我的getJson() 没有触发而我的getObjects() 触发并执行MVC 控制器操作。

【问题讨论】:

    标签: asp.net-mvc jquery asp.net-mvc-4 jsonp


    【解决方案1】:

    替换:

    var call = url + "id=48&jsoncallback=?";
    

    与:

    var call = url + "id=48&callback=?";
    

    您使用的自定义JsonpResult 依赖于一个名为callback 的查询字符串参数,而不是jsoncallback

    Callback = context.HttpContext.Request.QueryString["callback"];
    

    您还使用[JsonpFilter] 属性修饰了控制器操作并返回JsonpResult。如文章中所述,您必须阅读过您应该选择一个:

    [JsonpFilter]
    public ActionResult GetMyObjects(int id)
    {
        List<MyObject> list = MyDAO.GetMyObjects(id);
    
        return Json(list, JsonRequestBehavior.AllowGet);
    }
    

    或其他:

    public ActionResult GetMyObjects(int id)
    {
        List<MyObject> list = MyDAO.GetMyObjects(id);
    
        return new JsonpResult
        {
            Data = list,
            JsonRequestBehavior = JsonRequestBehavior.AllowGet
        };
    }
    

    但不要将两者混用。

    【讨论】:

    • 谢谢,这对我有帮助。我现在是否应该为以下问题创建一个新问题 - 当 .getJson() 执行时,rsp 为空,即它不包含列表。
    • 是的,您可以创建一个新问题。但不要忘记显示重要代码(即您的控制器操作返回的 MyObject 模型和 MyDAO.GetMyObjects 方法实现)。
    • 谢谢达林,我刚刚用实际的原始代码创建了新问题,没有混淆属性等:stackoverflow.com/questions/15054200/…
    猜你喜欢
    • 1970-01-01
    • 2014-12-31
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2013-11-19
    相关资源
    最近更新 更多