2

我正在尝试从 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 格式回复(已验证)。所以,我对这个问题感到困惑。

谢谢

4

2 回答 2

7

您要求 jQuery 使用 JSON-P,而不是 JSON。JSON-P 响应如下所示:

callback({
  "mydata" : "xxxxxx"
})

...其中callback是请求 URL 上指定的函数名称。更多关于JSON-P 的信息

如果请求与发出请求的文档位于同一来源,则可以通过将 .json 更改为来使用dataTypeJSON "json"

如果它来自不同的来源,这就是您使用 JSON-P 的原因,您需要修改服务器端以从 URL 的查询字符串中提取函数的名称,然后将函数调用放入您的响应中,如上所述。

于 2012-12-11T09:29:44.650 回答
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);
    }  
});
于 2012-12-11T10:34:36.993 回答