2016-09-08 11 views
-1

私はAJAX要求を呼び出し、渡されたパラメータの1つを使用する再利用可能な関数を作成しようとしています引数をAJAX呼び出しのデータセクションに追加します。

// Returns AJAX data for updating other fields based on a dropdown changing 
App.prototype.OnDropdownChange = function (s, e, newId, ajaxParameter, ajaxRequestURL) { 
    // Create an AJAX request based on the parameters 
    $.ajax({ 
     url: ajaxRequestURL, 
     data: JSON.stringify({ ajaxParameter: newId }), 
     type: 'POST', 
     success: function (data) { 
      // Return the data 
      return data; 
     }, 
     error: function (data) { 
      // Error 
      return data; 
     } 
    }); 
} 

「ajaxParameter」は、理想的には渡されるパラメータの名前を保持します。たとえば、 "ajaxParamter"には "MVC"コントローラがパラメータとして期待している "theNewID"が含まれていますが、渡されたときに "ajaxParameter"として表示され、その値は表示されません。

どうすればこの問題を解決できますか?

EDIT

http://imgur.com/a/GSaPd

それはajaxParameterとして示してどのようにここを参照してください?私が望むのは、私がそれを渡すものであるということです。

+0

ええ、これは完全に可能です。あなたが関数を呼び出したものを制御していると仮定します。 –

+0

私はそれをどのように呼び出すかを制御しますが、記録されるのは「未定義」です。 var data = x.OnDropdownChange(s、e、contactID、 "CustomerContactId"、 "/ Project/Project/GetCustomerContactDetails /"); console.log(data); –

+0

uhm ...あなたは非同期コールバックから戻ることはできません。 –

答えて

4

必要な作業を行うことができます。キーを定義するには、カッコ表記を使用してオブジェクトを作成するだけです。

しかしはるかに大きな問題successerrorハンドラ内returnの使用です。 AJAXリクエストは非同期であるため、何も返すことはできません。代わりに、それらのイベントの下で実行されるコールバック関数を提供する必要があります。これを試してみてください:

App.prototype.OnDropdownChange = function (s, e, newId, ajaxParameter, ajaxRequestURL, sCallback, eCallback) { 
    var data = {}; 
    data[ajaxParameter] = newId; 

    $.ajax({ 
     url: ajaxRequestURL, 
     data: data, // note no need to stringify the object 
     type: 'POST', 
     success: function (data) { 
      sCallback && sCallback(data); 
     }, 
     error: function (x, s, e) { 
      eCallback && eCallback(x, s, e); 
     } 
    }); 
} 

あなたはこのようにそれを呼び出すことができます:あなたは、このコードから見ることができるように

x.OnDropdownChange(s, e, contactID, "CustomerContactId", "/Project/Project/GetCustomerContactDetails/", function(data) { 
    // success: 
    console.log(data); 
}, function(x, s, e) { 
    // error: 
    console.log(x, s, e); 
}); 

、それはまだ非常に冗長だと今、本質的に非常に少ない利益で$.ajaxための単なるラッパーであります。

+0

時間をかけて私の問題を読んで、人に答えてくれてありがとう。魅力のように働き、助けに感謝します。 –

0

まず、$ .ajaxリクエストのデータパラメータにobjを渡すときに、JSON文字列のようにデータベースに格納していると仮定しない限り、文字列化する必要はありません。

第2に、ajaxリクエストのsuccess、error、beforeSendおよびcompleteコールバック関数は、関数自体であり、コールバック関数自体にデータを返すだけであるため、返すことはできません。

あなたが

var myAjaxDatavalue = (function(myMethod,myData,myUrl){ 
    var temp = null; 
    $.ajax({ 
     method: myMethod, 
     url: myUrl, 
     data: myData, 
     async: false, 
     success: function(result){ 
     temp = result 
     }. 
     error: function (xhr, ajaxOptions, thrownError){ 
     console.log(xhr); 
     } 
    }); 
    return temp; 
})(); 

を返しますが、あなたはAJAXの目的の一つを見ることができるように用心する必要があるデータを格納するための一時的な変数を使用する必要があなたの元の関数にコールバック関数からデータを取得するにはこれは非同期では無効になります。膨大な量のデータを取得すると、問題が発生する可能性があります。

関連する問題