2014-04-03 22 views
0

下面是一个简单的Ajax调用我在做不同的域:JSONP没有发射成功,函数

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

我的成功函数从来没有发射,但一个有效的JSON是在Fiddler传回。

enter image description here

原始输出:

enter image description here

我怎么能那么显示我的成功函数返回的结果?

预先感谢您!

+0

你实现服务器端?你可以请张贴来自服务器的RAW答案吗? –

+0

'有效的JSON'。对于jsonp,它不应该返回JSON。 – dfsq

+0

JSON不是JSONP –

回答

0

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

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

url: 'url?callback=?' 

要只是'url'或不管它应该是,但不回调参数。我非常肯定,jQuery将为您提供一个回调参数。

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

dataType: 'json' 

FYI:JSON-P实际上是在浏览器中提供JSON数据作为参数调用回调函数的JavaScript代码片段。

0

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

服务器需要知道两件事情:

  1. 当返回JSONP
  2. 什么是JSONP回调使用的名称。

下面调用Facebook的图形API,我告诉在Facebook之前提到的两件事情,在这两个参数的“格式”和“回调”

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' }])