Jos*_*osh 4 ajax jquery jsonp cross-domain
我试图创建一个jsonp请求的服务器和客户端,我似乎无法使其工作.我查看了很多指南,博客文章等,但几乎每个人都只显示客户端.
这是我的客户端代码
$.ajax({
dataType: 'application/json',
data: params,
jsonp: 'jsonpCallback',
url: settings.domain + '/httpext.dll?json_cc',
success: function (data) {
//determine the return status
},
error: function (response, status, error) {
//error handling
}
}); //end ajax
Run Code Online (Sandbox Code Playgroud)
现在,服务器正在返回这样的硬编码值
jsonpCallback({"username":"meltingice","posts"1234});
Run Code Online (Sandbox Code Playgroud)
我的问题是我无法得到请求和响应一起工作.目前,响应是返回application/json,所以如果我改变了我的请求,那么期望jsonp它的错误
资源解释为脚本,但使用MIME类型application/json进行传输.未捕获的ReferenceError:未定义jsonpCallback
首先,如您所见,我已经定义了jsonpCallback.
现在,如果我将dataType更改为application/json,那么我会收到此错误
XMLHttpRequest cannot load http://myserver/httpext.dll?json_cc&sid=adsfhasjdkfhajksdghjk%3Basdhg&action=SALE&ccCard=&ccNum=&ccExMM=0&ccExYYYY=0&ccCVV2=&holdersName=&totalDue=0&dueDate=11%2F19%2F2010. Origin http://localhost:59905 is not allowed by Access-Control-Allow-Origin.
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,它并没有放入callback=?
网址.这令人沮丧.
如何设置服务器端以便我可以使用jsonp调用它?响应类型需要什么?如何格式化返回的数据,以便我的客户端代码可以撤回数据?
这不起作用的原因是因为您的服务器始终返回硬编码的方法名称,并且您的客户端使用匿名success
处理程序.这不行.您需要将服务器配置为使用作为参数传递的方法名称,否则它将永远不会success
在客户端调用回调.因此,一旦您配置服务器以考虑jsoncallback
查询参数,您可以像这样测试它:
$.getJSON(settings.domain + '/httpext.dll?json_cc&jsoncallback=?', params, function(result) {
alert('success');
});
Run Code Online (Sandbox Code Playgroud)
现在,服务器将收到可能如下所示的请求:
http://foo.com/httpext.dll?json_cc&jsoncallback=jsonp1290183992345
Run Code Online (Sandbox Code Playgroud)
它应该像这样回应:
jsonp1290183992345({"username":"meltingice","posts"1234});
Run Code Online (Sandbox Code Playgroud)
适当Content-Type
以及明显(application/json
).