سؤال

لقد كنت أحاول تقديم طلب AJAX إلى خادم خارجي. لقد تعلمت حتى الآن أنني بحاجة إلى استخدام GetJson للقيام بذلك بسبب الأسباب الأمنية؟

الآن، لا أستطيع أن أبدي دعوة بسيطة إلى صفحة خارجية. لقد حاولت تبسيطها بقدر ما أستطيع ولكنها لا تزال لا تعمل. لدي 2 ملفات، Test.html & Test.php

My Test.html يجعل مكالمة مثل هذا، إلى localhost لاختبار:

    $.getJSON("http://localhost/OutVoice/services/test.php", function(json){
    alert("JSON Data: " + json);
});

وأريد اختبار My Test.php لإرجاع "اختبار" بسيط:

$results = "test";
echo json_encode($results);

ربما أحرز بعض خطأ صبيح لا يصدق ولكني لا أستطيع أن يبدو أنه من أجل معرفة ذلك. أيضا، إذا كان هذا يعمل، كيف يمكنني إرسال بيانات إلى صفحة الاختبار الخاصة بي، كما تفعل مثل Test.php؟ ID = 15؟


تتمثل صفحة Test.html في استدعاء صفحة Test.php على LocalHost، نفس الدليل لا أحصل على أي أخطاء، فقط لا تنبيه ..

هل كانت مفيدة؟

المحلول

هو - هي استطاع يكون أنك لم تحصل على رد اتصال في Test.php. أيضا، json_encode يقبل فقط صفيف:

$results = array("key" => "value");
echo $_GET['callback'] . '(' . json_encode($results) . ')';
// the callback stuff is only needed if you're requesting from different domains

يقوم JQuery تلقائيا بالتبديل إلى JSONP (أي استخدام علامات البرنامج النصي بدلا من XMLHttpRequest) عند استخدام http://. وبعد إذا كان لديك Test.html و Test.php على نفس المجال، فحاول استخدام المسارات النسبية (ولا توجد عمليات احتياطية).

نصائح أخرى

كن حذرا مع إجابة موف. لقد حصلت على ضعف XSS شائع: http://www.metaltoad.com/blog/using-jsonp-safely.

سيكون أبسط الحل هو إضافة الرمز أدناه قبل أي إخراج إلى ملف Test.php الخاص بك، ثم لديك المزيد من المرونة مع الأساليب التي تستخدمها، يجب أن تعمل مكالمة AJAX القياسية.

header ('Access-Control-Allow-Origin: *');

ومع ذلك، استخدم شيء رد الاتصال JSON عند الحصول على بيانات من خادم خارج عنصر تحكم الخاص بك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top