2

HTMLとjsonの両方を返すAjax呼び出しからjsonアイテムデータを取得しようとしています。以下の私の JavaScript は成功メッセージを返します。これは役に立ちます。データにアクセスする方法がわかりません。私はnewPriceこの応答からアクセスしようとしています:

Data Loaded: <pre>Array
(
[point] => 86
[claimId] => 3594
[type] => yeh
)
</pre>{"data":{"newPrice":88,"lockedInPrice":86},"errors":[],"success":true,"code":200}

私のコードは以下です。私は特に newPrice 値のみを返そうとしています:

var newData = $.ajax({ 
    type: "POST",
    url: takeurl,
    dataType: "html",
    data: { point: point, claimId: id, type: val }
    })
    .success(function(data) { 
        alert("Data Loaded: " + data);
        //newPrice = data.newPrice; -- returned undefined?
        console.log(newPrice);
        })

    .error(function() { alert("not yet"); })
    .complete(function(data) { 
        console.log('complete 1' );
    });

// Set another completion function for the request above
newData.complete(function(data){ 
    console.log("second complete" );
    });


return false;
 });

ありがとうございました!

4

3 に答える 3

4

応答に HTML と JSON の両方が含まれているようです。通常、応答は JSON のみであり、コンテンツ タイプ application/JSON で応答します。応答を使用することはできますが、これは少し非正統的です。

substring と indexof を使用して HTML 部分 "" を切り取り、JSON を使用して JavaScript オブジェクトを作成できます。

var data = "<pre>Array\n(\n[point] => 86\n[claimId] => 3594\n[type] => yeh\n)\n</pre>{\"data\":{\"newPrice\":88,\"lockedInPrice\":86},\"errors\":[],\"success\":true,\"code\":200}";

alert("Data Loaded: " + data);
var n = data.indexOf("</pre>{");
data = data.substring(n+6);
var result = JSON.parse(data);
alert("JSON.newPrice:"+result.data.newPrice);

JSON.parse() メソッドは、JSON 文字列を JSON オブジェクトに変換するために使用されます。

于 2013-04-12T20:38:43.983 に答える
0

コントローラーからの Json 応答で「pre」タグを含む HTML を取得しないようにするには、以下のコード スニペットを使用します。

var result= objectData;
return Json(result, "text/html");
于 2015-12-13T06:52:51.683 に答える
0

JSON として応答にアクセスする場合は、application/jsonコンテンツ タイプで返され、有効な JavaScript プレーン オブジェクトのように見える必要があります。dataTypejQuery.ajax呼び出しも設定しjsonます。

于 2013-04-12T20:39:02.963 に答える