سؤال

أنا أستخدم الطريقة أعلاه ويعمل بشكل جيد مع معلمة واحدة في عنوان 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;
});
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top