كيفية استخدام GetJson، إرسال البيانات مع طريقة بعد؟
-
09-09-2019 - |
سؤال
أنا أستخدم الطريقة أعلاه ويعمل بشكل جيد مع معلمة واحدة في عنوان URL.
على سبيل المثال Students/getstud/1
حيث يتم تطبيق تنسيق وحدة التحكم / الإجراء / المعلمة.
الآن لدي إجراء في تحكم الطلاب الذين يقبلون معلمين وإرجاع كائن JSON.
فكيف يمكنني نشر البيانات مع $.getJSON()
باستخدام طريقة بعد؟
طرق مماثلة مقبولة أيضا.
الهدف هو استدعاء إجراءات تحكم مع AJAX.
المحلول
طريقة $ .getjson () هل تحصل HTTP وليس منشورا. تحتاج إلى استخدام $ .post ()
$.post(url, dataToBeSent, function(data, textStatus) {
//data contains the JSON object
//textStatus contains the status: success, error, etc
}, "json");
في تلك الدعوة، dataToBeSent
يمكن أن يكون أي شيء تريده، على الرغم من إرسال محتويات نموذج HTML، يمكنك استخدام تسلسل طريقة لإنشاء البيانات للنشر من النموذج الخاص بك.
var dataToBeSent = $("form").serialize();
نصائح أخرى
هذا هو الحل "سطر واحد":
$.postJSON = function(url, data, func) { $.post(url+(url.indexOf("?") == -1 ? "?" : "&")+"callback=?", data, func, "json"); }
من أجل استخدام JSONP، وطريقة النشر، تضيف هذه الوظيفة "رد الاتصال" للحصول على المعلمة إلى عنوان URL. هذه هي الطريقة لاستخدامها:
$.postJSON("http://example.com/json.php",{ id : 287 }, function (data) {
console.log(data.name);
});
يجب أن يكون الخادم مستعدا للتعامل مع رد الاتصال بالحصول على المعلمة وإرجاع سلسلة JSON على النحو التالي:
jsonp000000 ({"name":"John", "age": 25});
في أي "JSONP000000" هو رد الاتصال بالحصول على قيمة.
في PHP، سيكون التنفيذ مثل:
print_r($_GET['callback']."(".json_encode($myarr).");");
لقد قمت ببعض الاختبارات عبر المجال ويبدو أنها تعمل. لا تزال بحاجة إلى مزيد من الاختبارات رغم ذلك.
فقط أضف هذه الخطوط إلى <script>
(في مكان ما بعد تحميل المسج ولكن قبل نشر أي شيء):
$.postJSON = function(url, data, func)
{
$.post(url, data, func, 'json');
}
استبدال (بعض / الكل) $.getJSON
مع $.postJSON
و استمتع!
يمكنك استخدام نفس وظائف رد جافا سكريبت كما هو الحال مع $.getJSON
وبعد لا يلزم تغيير جانبي الخادم. (حسنا، أوصي دائما باستخدام $_REQUEST
في فب. http://php.net/manual/en/reserved.variables.request.php., من بين $ _REQUEST، $ _GET و $ _Post أي واحد هو الأسرع؟)
هذا أبسط من محلول @ Lepe.
كان لي رمز كان يفعل getjson. أنا ببساطة استبدالها مع وظيفة. لدهشتي، وانها عملت
$.post("@Url.Action("Command")", { id: id, xml: xml })
.done(function (response) {
// stuff
})
.fail(function (jqxhr, textStatus, error) {
// stuff
});
[HttpPost]
public JsonResult Command(int id, string xml)
{
// stuff
}
أنا فقط استخدمت وظيفة وإذا:
data = getDataObjectByForm(form);
var jqxhr = $.post(url, data, function(){}, 'json')
.done(function (response) {
if (response instanceof Object)
var json = response;
else
var json = $.parseJSON(response);
// console.log(response);
// console.log(json);
jsonToDom(json);
if (json.reload != undefined && json.reload)
location.reload();
$("body").delay(1000).css("cursor", "default");
})
.fail(function (jqxhr, textStatus, error) {
var err = textStatus + ", " + error;
console.log("Request Failed: " + err);
alert("Fehler!");
});
$.getJSON()
مفيد للغاية لإرسال طلب AJAX واستعادة بيانات JSON كرد. للأسف، تفتقر وثائق مسج إلى وظيفة أخت التي يجب تسميتها $.postJSON()
. وبعد لماذا لا تستخدم فقط $.getJSON()
ويجري معها؟ حسنا، ربما تريد إرسال كمية كبيرة من البيانات أو، في حالتي، IE7 فقط لا يريد العمل بشكل صحيح مع طلب الحصول عليه.
هذا صحيح، لا يوجد حاليا $.postJSON()
الطريقة، ولكن يمكنك إنجاز نفس الشيء من خلال تحديد المعلمة الرابعة (النوع) في $.post()
وظيفة:
بدا الرمز الخاص بي مثل هذا:
$.post('script.php', data, function(response) {
// Do something with the request
}, 'json');
إذا كان لديك اثنين فقط من المعلمات، يمكنك القيام بذلك:
$.getJSON('/url-you-are-posting-to',data,function(result){
//do something useful with returned result//
result.variable-in-result;
});