1

戻り値の型を「json」に設定して、ajax への jQuery 同期呼び出しを行っていますが、戻りデータは文字列として返されます。私が間違っていることはありますか、それとも文字列をオブジェクトに変換する方法はありますか?

var ajax_response = $.ajax({url:"ajx_services", async:false, type:"post", data:{method: "getItem", item_no: $(ctx).val()}, dataType:"json"});
var data = ajax_response.responseText;

デバッガーで結果を確認できるように、ajax 呼び出しは機能しています。返されたデータが文字列になっているだけです。

4

3 に答える 3

1

responseText は常に文字列になります。$.ajax() 内に、パラメーターを使用して「成功」コールバック関数を追加すると、それが JSON データになります。

$.ajax({
    -- other stuff --
  , success: function(data)
    {
        // do something with data
    }
});
于 2009-12-09T19:45:34.030 に答える
1

これは、 $.ajax() が実際の XMLHttpRequest を返すためです.. responseTextJSONなどの概念を持たない.

これを試して:

var data = (function () {
    var ajaxResponse = '';
    $.ajax({url:"ajx_services", async:false, type:"post", data:{method: "getItem", item_no: $(ctx).val()}, success: function (data) {
        ajaxResponse = data;
    }, dataType:"json"}); 
    return ajaxResponse;
}());

ajaxResponse呼び出しで定義された関数の親クロージャで定義されているため、関数によって提供される JSON オブジェクトajax()に設定できます(Ajax リクエストが正常に完了したときに呼び出されます)。次に、親クロージャーによって返され、外部変数に割り当てられます。datasuccessajaxResponsedata

ajaxResponseから変更されたものをすぐに返すこの機能ajax()は、要求が同期的であるためのみ可能であることに注意してください。非同期の場合return ajaxResponse、空の文字列を返す可能性が非常に高くなります。

于 2009-12-09T19:56:06.963 に答える
0

eval 関数を使用して、その方法が機能するはずです。

var ajax_response = $.ajax({url:"ajx_services", async:false, type:"post", data:{method: "getItem", item_no: $(ctx).val()}, dataType:"json"});
ajax_response.onreadystatechange = xHandler;

function xHandler() {
  if (ajax_response.readyState == 4) {
    var data = eval('(' + ajax_response.responseText + ')');
  }
}

ただし、前に述べたように、作業を楽にするために存在するjQuery 成功コールバックを使用する必要があります。

于 2009-12-09T20:04:27.807 に答える