2

javascriptからjqueryajaxリクエストを送信しようとしています。次のコードを使用していますが、機能していません。

$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ではなくJSON-Pを使用するように依頼しました。JSON-P応答は次のようになります。

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

...ここcallbackで、はリクエストのURLで指定された関数名です。JSON-Pの詳細については、こちらをご覧ください。

リクエストがリクエストを行ったドキュメントと同じオリジンdataTypeにある場合は、をに変更してJSONを使用できます"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 に答える