Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript jquery ajax成功返回对象_Javascript_Jquery_Ajax - Fatal编程技术网

javascript jquery ajax成功返回对象

javascript jquery ajax成功返回对象,javascript,jquery,ajax,Javascript,Jquery,Ajax,下面是一个用方法包装的简单ajax调用 MyNS.GetStringList = function (successCallback, failedCallback) { var methodUrl = serverUrl + "/GetStringList"; $.ajax({ type: "GET", contentType: "application/json; charset=utf-8", dataType: "json", url: methodUrl

下面是一个用方法包装的简单ajax调用

MyNS.GetStringList = function (successCallback, failedCallback) {
var methodUrl = serverUrl + "/GetStringList";
$.ajax({
    type: "GET",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    url: methodUrl, // Location of the service
    data: {}, //Data sent to server
    beforeSend: function (XMLHttpRequest) {
        //ensures the results will be returned as JSON.
        XMLHttpRequest.setRequestHeader("Accept", "application/json");
    },
    success: successCallback,
    error: failedCallback
});
}
下面是一个调用上述方法的方法

function GoGetTheStringList() {
        var stringList;
        stringList = MyNS.GetStringList(function (data) { return data.d; }, function (XmlHttpRequest, textStatus, errorThrown) {
            alert("error");
        });

        alert(reasonsDictionary); // THIS IS UNDEFINED!

    }
让第一个方法返回data.d对象的正确语法是什么

一如既往地谢谢你!
乔恩

真的不可能。Ajax调用是异步的,这意味着在调用
success
回调之前,该方法将返回

编辑/更正:您可能可以这样做,但您必须将jQuery ajax
async
选项设置为
false
,这意味着您将执行同步调用,这意味着您的整个应用程序将等待它返回。最好是在调用
success
时将回调传递给要调用的函数

响应您的编辑:是,它将是未定义的,因为它与上下文无关。您需要做的是从回调内部处理数据,因为此时您将知道您拥有它,并且因为您无法从函数B返回函数a的结果数据。在回调中,您应该调用一个函数来处理您获得的数据

var latestData;
function getStuff(succeeded,failed) {...}
function gotStuff(dataWrapper) {
    latestData = dataWrapper.d;
    doThingsWithStuffData(dataWrapper.d);
}

getStuff(gotStuff, function () { ... });
您可以使用,因为它更适合此用途

MyNS.GetStringList = function () {
var methodUrl = serverUrl + "/GetStringList";
return $.ajax({                            // return here, this will returns a deffered object
          type: "GET",
          contentType: "application/json; charset=utf-8",
          dataType: "json",
          url: methodUrl, // Location of the service
          data: {} //Data sent to server
       });
}
你不应该这样做

beforeSend: function (XMLHttpRequest) {
            //ensures the results will be returned as JSON.
            XMLHttpRequest.setRequestHeader("Accept", "application/json");
           },
这就是
数据类型:“json”
所做的,它为jQuery提供了一个提示,说明服务器响应中的预期内容

那么在你的功能中

function GoGetTheStringList() {
      var stringList;
      $.when( MyNS.GetStringList() )   
      .done(function( data ){  console.log( data.d );  }); 
      .fail(function( data ) { console.log('Request failed'); });
}

因为我的第一个方法没有return语句,所以不会返回任何内容。在success方法中添加return语句也不起作用。如果我在$.ajax调用前面添加一个return,我会得到一个jhqr对象,该对象具有responseText属性,但不确定这样做有多安全,因为它可能还没有返回。对不起。一开始我完全误解了你的意思。我知道您不能从异步调用返回。那么,有没有一种方法可以通过引用传递一个值类型,这样我就不必把逻辑放在那个调用中了?你不需要把逻辑放在那个调用中。如果您检查我的回复,您将看到我在打开数据包后调用回调中的另一个函数来处理数据。另一方面,从技术上讲,所有对象参数都是通过Javascript中的引用传递的。感谢您的示例,这非常有意义。但是,我需要提出一个关于如何在javascript中通过引用传递值类型的新问题,因为我不希望发生的逻辑是简单地从success方法中获取data.d对象,并尽可能将其传递给其他方法。谢谢你的快速帮助!