JSONP没有触发成功功能

时间:2014-04-03 14:47:03

标签: javascript jquery ajax json jsonp

以下是我对其他域名进行的简单Ajax调用:

<script>
    $.ajax({
        url: 'url?callback=?',
        dataType: 'jsonp',
        success: function (data) {
                    alert(data[0].DeviceName);   //Just to display
                }
            })
        },
    })
</script>

我的成功函数永远不会被触发,但Fiddler会返回一个有效的JSON。

enter image description here

原始输出:

enter image description here

如何在成功函数中显示返回的结果?

提前谢谢!

2 个答案:

答案 0 :(得分:0)

服务器返回JSON数据,而不是您期望的JSONP。

这可能是因为您指定了一个时髦的callback参数。尝试更改:

url: 'url?callback=?'

'url'或其他任何内容,但没有回调参数。我非常确定jQuery会为你提供一个回调参数。

如果这不起作用,则服务器可能无法返回JSON-P数据。但显然它支持普通的JSON。所以你可能只是改变你的通话,以便你接受JSON数据:

dataType: 'json'

仅供参考:JSON-P实际上是一段JavaScript代码,它在浏览器中调用回调函数,提供JSON数据作为参数。

答案 1 :(得分:0)

所以,你的问题是服务器没有返回有效“JSONP”。我将用一个例子来解释。

服务器需要知道两件事:

  1. 何时返回JSONP
  2. 要使用的JSONP回调的名称是什么。
  3. 在下面的facebook图形API调用中,我告诉facebook前面提到的两件事,在两个参数“format”和“callback”中

    http://graph.facebook.com/adrian.salazar.cs?format=JSONP&callback=mything

    然后,Facebook会给我一个有效的JSONP回复。

     /**/ mything({
       "id": "714291966",
       "first_name": "Adrian",
       "gender": "male",
       "last_name": "Salazar",
       "link": "https://www.facebook.com/adrian.salazar.cs",
       "locale": "en_US",
       "name": "Adrian Salazar",
       "username": "adrian.salazar.cs"
    });
    

    但是,什么是有效的JSOP响应?

    假设服务器希望您将jsonp回调指定为名为“jpcallback”的参数

    然后你的服务器必须使用jpcallback中传递的参数包装正常的JSON响应,作为函数调用...

    因此,JSONP格式的GET http://myserver.com/getdevices?jpcallback=randomJsonpCallback的原始答案是:

    randomJsonpCallback([{ Id: 222, Name: 'aaa' }, { Id: 333, Name: 'bbb' }])