-1

単純なajax呼び出しを実行し、返されたJSON文字列をjavascript配列に変換しようとしています。これは正しい値を取得しています。コードは機能しません。単純にjson文字列を返し、それを配列に変換したいと思います。

function getData(){
    var barcode = $('#idQuery').val();
    alert(barcode);
    var test = $.ajax({
        type: 'GET',
        dataType: 'json',
        url: 'http://example.com/public/ruser/family',
        data: {barcode: barcode},
        success: function(data){
            alert(data);
        }
    });
    alert(test);
}

これは、URLに入れた場合のブラウザからの応答です。

[[{"age":10,"id":"1","name":"John Doe","points":"4275653423"}]]
4

3 に答える 3

0

編集:応答が有効なjsonになり、ajax成功コールバックが実行されたら、サーバーから返されたjson文字列をjavascriptオブジェクトに変換します。JSON.parse()

success: function (data) {
    var obj = JSON.parse(data);
    alert(obj.age);
}

注:jsonシリアル化(JSON.parse)をネイティブにサポートしているのは最新のブラウザーのみです。古いブラウザがこの機能をサポートしていることを確認するには、DouglasCrockfordのjson2.jsをお勧めします。

https://github.com/douglascrockford/JSON-js/blob/master/json2.js

上記をダウンロードしてページに含めるだけで、準備完了です。

編集:サーバーからの応答には、データを含むオブジェクトを含む別の配列を含む配列が含まれています。

[[{"age":10,"id":"1","name":"John Doe","points":"4275653423"}]]

サーバーは、オブジェクトのみを含むjson文字列で応答する必要があります。

'{"age":10,"id":"1","name":"John Doe","points":"4275653423"}'

最後に、サーバーは正しいコンテンツタイプ「application/json」で応答する必要があります

編集:あなたのコメントで、サーバーがリダイレクトである303を返していると言いました。ajax呼び出しで使用しているURLは、必要なデータを返す別のURLにリダイレクトされます。データを返すURLを使用する必要があります。URLは正確に一致する必要があります。たとえばhttp://example.com/public/ruser/family、と同じではありませんhttp://example.com/public/ruser/family/

編集:最終コード:

function getData(){
    var barcode = $('#idQuery').val();

    var test = $.ajax({
        type: 'GET',
        dataType: 'json',
        url: 'http://example.com/public/ruser/family.json',
        data: { barcode: barcode },
        success: function (data) {
            var obj = JSON.parse(data);
            alert(obj.age);
        }
    });
}
于 2013-01-04T17:10:52.083 に答える
0
function getData(){
    var barcode = $('#idQuery').val();
    alert(barcode);
    $.ajax({
        type: 'POST',
        contenttype: "application/json; charset=utf-8",
        url: "controller/action",
        data: {barcode: barcode},
        success: function(data){
            alert(data);
        }
    });

}

上で試してみてくださいそれはうまくいくはずです私に進捗状況を知らせてください................

于 2013-01-04T17:24:09.453 に答える
0

データプロバイダーは、$。ajaxを使用しているクライアントと同じドメインにありますか?そうでない場合は、JSONP(関数からではないことがわかります)を使用しているか、データプロバイダーのAccess-Control-Allow-Originヘッダーがクライアントドメインを許可するように設定されていることを確認する必要があります。

クロスオリジンの問題である場合、成功コールバックは呼び出されません。さらにデバッグするための完全なメソッドを実装することで、エラーをテストできます。(注:console.logは、アラートよりもデバッグに役立ちます。)

これがあなたのために何を記録するかを見てください:

function getData(){
    var barcode = $('#idQuery').val();
    var test = $.ajax({
        type: 'GET',
        dataType: 'json',
        url: "http://api.flickr.com/services/feeds/photos_public.gne?format=json",
        data: {barcode: barcode},
        success: function(data){
            console.log(data);
        },
        complete: function(jqXHR, textStatus) {

            console.log(jqXHR)

            console.log("What's the issue? " + textStatus)
        }
    });
}

また、Chromeの開発ツールを使用している場合(すばらしいので、そうする必要があります)、クロスドメインエラーはすべてコンソールに記録されます。(F12で開くか、右クリックして要素を検査します。)

于 2013-01-04T17:39:51.873 に答える