我将用户名和密码作为请求参数发送到
AJAX中的服务器并尝试显示响应消息.但是无法显示响应消息.在fiddler中它显示响应消息.但是在浏览器屏幕上它没有显示.请有人帮助我,我错了或需要改变任何东西..
我写得像这样 –
我写得像这样 –
$(document).ready(function () { $("#btnCity").click(function () { $.ajax({ type: "POST",url: "http://test.xyz.com/login",crossDomain: true,contentType: "application/json; charset=utf-8",data: { username: "abc",password: "1234" },dataType: "JSONP",jsonpCallback: 'jsonCallback',async: false,success: function (resdata) { alert(resdata); },error: function (result,status,err) { alert(result.responseText); alert(status.responseText); alert(err.Message); } }); }); });
解决方法
TL; DR:我想问题出现在代码的服务器端(我们还不知道).
起初:我不知道为什么它失败了.我已经使用了你的代码并针对公共可用的JSONP API运行它,它返回系统的当前IP并且它有效.
请尝试使用以下网址:http://ip.jsontest.com/.
所以很可能,服务器不会返回对JSONP请求的正确响应.查看开发人员工具中的网络选项卡.使用您当前的代码,服务器的答案应该是这样的:
jsonCallback({'someResponseKeys': 'someResponseValue'});
注意:标题应包含Content-Type:application / javascript!
顺便说一句,即使现在不能解决你的问题 – 这里有一些调整,我想建议你:
>不要将异步设置为false,在jQuery.ajax()的文档中说:
Cross-domain requests and dataType: “jsonp” requests do not support synchronous
operation.
>你不需要设置一个jsonpCallback,因为jQuery会生成并处理(使用成功函数随机一个.来自文档的引用:
This value will be used instead of the random name automatically generated by jQuery. It is preferable to let jQuery generate a unique name as it’ll make it easier to manage the requests and provide callbacks and error handling.
所以我的代码来了:
$(document).ready(function () { $("#btnCity").click(function () { $.ajax({ type: "POST",url: "http://ip.jsontest.com/",success: function (resdata) { console.log("success",resdata); },err) { console.log("error",result.responseText); console.log("error",status.responseText); console.log("error",err.Message); } }); }); });
另一个解决方案,如Yonatan Ayalon建议的,可以使用预定义的函数完成,然后将jsonpCallback显式设置为应该调用的函数.