我正在尝试从javascript发送jquery ajax请求。我正在使用以下代码,但它无法正常工作。
$j.ajax({
url: 'https://c.na14.visual.force.com/apex/controlApi',
type : 'GET',
dataType: 'jsonp',
success : function(result){
alert('Result is '+result);
},
error : function(jqXHR, textStatus, errorThrown) {
alert('status is '+jqXHR.status);
alert('Error is '+textStatus);
}
});
我的回复是json格式。就像
{
"mydata" : "xxxxxxx"
}
当我使用上面的ajax请求时,错误函数被执行。它显示状态为200,错误为“parsererror”。但是,我的回答采用json格式(经过验证)。所以,我对这个问题感到困惑。
由于
答案 0 :(得分:7)
您已经要求jQuery使用JSON-P,而不是JSON。 JSON-P响应如下所示:
callback({
"mydata" : "xxxxxx"
})
...其中callback
是在请求的URL上指定的函数名称。更多关于JSON-P here。
如果请求位于same origin作为发出请求的文档,则可以通过将dataType
更改为"json"
来使用JSON。
如果它位于不同的原点并且这就是您使用JSON-P的原因,则需要修改服务器端以从URL的查询字符串中提取函数的名称,然后将函数调用放入响应中上方。
答案 1 :(得分:0)
我找到了一种方法。
JSONP响应必须采用以下形式
testCallback({
"mydata" : "xxxxxx"
})
并且请求将是
$j.ajax({
url: 'https://c.na14.visual.force.com/apex/controlApi?callback=testCallback',
type : 'POST',
dataType: 'jsonp',
crossDomain : true,
jsonp: false,
jsonpCallback: 'testCallback',
success : function (data){
alert(data.mydata);
},
error : function(jqXHR, textStatus, errorThrown) {
alert('Error is '+textStatus);
}
});