Alo*_*lon 2 javascript ajax jquery json jsonp
我是向客户端发送请求的客户端.我的最终目标是在jsonp中发送请求.
这是我发送请求时得到的服务器响应?accept=json(并且因为它不是jsonp而得到无效的会话错误)
{"errorCode":-15,"errorDescription":"SessionNotFoundException - Session not found","success":false,"payload":null}
Run Code Online (Sandbox Code Playgroud)
我可以读它,它很好.
但是,这是服务器响应?accept=jsonp:
jQuery171024326910870149732_1351429007451({"action":"", "type":"", "callerId":""}, {"errorCode":0,"errorDescription":"OK","success":true,"payload":null});
Run Code Online (Sandbox Code Playgroud)
它是这两个对象的形式,我不知道如何阅读:{a},{b}.
当我使用jQuery ajax调用时,服务器数据的输出只是{a}部分:
Object {action: "", type: "", callerId: ""}
我的两个问题是:
{a},{b})的服务器响应是否有效?服务器人通过发送那种对象会犯错误还是有效?这是我使用的ajax调用:
$.ajax({
url:url,
dataType:'jsonp',
success:function(data){
console.log("data is,"data")
//if the call was success
if (data.success) {
//if errors
} else {
}
}
}
Run Code Online (Sandbox Code Playgroud)
为了实际验证成功回调不能处理2个参数,我尝试了一个带有2个arg函数的简单测试,并且传入了2个对象:
function test(a,b) {
console.info(a);
}
test({"name":"test"},{"hello":"world"});
Run Code Online (Sandbox Code Playgroud)
这成功了,因为我在JavaScript Object Notation中将两个单独的对象传递给了一个需要2个参数的函数.
接下来,我使用简单的PHP脚本重新创建了一个示例响应:
<?php echo $_REQUEST["callback"]?>({"test":"test"},{"hello":"world"});
Run Code Online (Sandbox Code Playgroud)
所以,下一步,我继续修改成功回调,以便它需要2个参数:
$.ajax({
url:'http://local.sandbox.com/jsonp2/test.php',
dataType:'jsonp',
success:function(data, data2){
console.log("data is " + data2)
//if the call was success
if(data.success) {
alert("yes");
//if errors
} else {
alert(data2.hello);
}
}
});
Run Code Online (Sandbox Code Playgroud)
现在,根据jQuery AJAX Success Handler文档,我遇到了问题:
成功(data,textStatus,jqXHR)
Function,Array如果请求成功,则调用的函数.该函数传递三个参数:
- 从服务器返回的数据,根据dataType参数格式化;
- 描述状态的字符串;
- 和jqXHR(在jQuery 1.4.x,XMLHttpRequest)对象.
从jQuery 1.5开始,成功设置可以接受一系列函数.每个函数将依次调用.这是一个Ajax事件.
- 重点是我的
成功处理程序的第二个参数始终是响应的状态,因此我的输出是控制台中的"数据成功",而else块中的警报未定义.
jQuery的jsonp实现肯定是为处理回调中的单个对象而设计的,因为它将自定义值替换为回调查询参数,服务器将其用作"填充"或响应的包装器,通常采用"jQuery1232432423432432"形式.成功处理程序,根据文档,需要3个参数,其中第一个是对象,最后两个由jQuery提供.填充函数只需要1个参数.因此,jQuery无法解决这个问题.
但是,假设您无法控制服务器生成的内容,则仍有一种技术仍然可以利用现有的服务器端响应.
// this is a custom function to make jsonp requests to the server.
function jsonp(url, callback) {
var script = document.createElement("script");
script.setAttribute("type","text/javascript");
script.setAttribute("src", url + "?callback="+callback + "&cachebuster="+new Date().getTime());
document.getElementsByTagName("head")[0].appendChild(script);
}
Run Code Online (Sandbox Code Playgroud)
要调用该函数,请使用它代替$ .ajax调用,除了传入一个命名的回调处理程序:
jsonp(url, "myCustomSuccessFunction");
Run Code Online (Sandbox Code Playgroud)
确保定义一个自定义的命名成功回调函数:
function myCustomSuccessFunction(data1, data2) {
console.info(data1); // contains first object
console.info(data2); // contains second object
// do stuff w/said objects here
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1969 次 |
| 最近记录: |