الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

AJAX - ارسال form الى صفحة php موجودة على خادم اخر ليس محلي

بدأه feras jamal في 3 أغسطس 2012 · 14 رد · 1,234 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله،

يا جماعة ان عندي مشروع بشتغل عليه حاليا وعندي مشكلة اتمنى تساعدوني فيها:

اريد ان اقوم بارسال بيانات من صفحة php من الجهاز المحلي الى جهاز اخر ( يعني ملفات المشروع موزعة على جهازين منفصلين ) ويجب ان استخدم تقنية ajax في عملية ال post

على الجهاز الاول صفحة php تحتوي على كود ajax لارسال ال from الى الصفحة الخرى والتي هي موجودة على جهاز اخر و domain اخر

function SubmitForm()
{
var data=$('#formdiv').serialize();

$.ajax ({
	type:'Post',
	url:'http://192.168.5.66/print.php',
	data: data,
	timeout:0,
	success:function(rData)
	{
		alert (rData);
	}

});
}

المشكلة التي بتصير معي ما في اي تجاوب وانا لازم استخدم ال ajax في الكود لغايات برمجية

قمت سابقا باستخدام curl وعن طريقها اقدرت ابعت بيانات لصفحة اخرى موجودة على server اخر ، لكن curl ما بتنفعني يجب ان يتم عملها باستخدام ال ajax لانه في بيانات راجعة سوف اقوم بعمليات عليها باستخدام javascript

If your actions inspire others to dream more, learn more, do more and become more, you are a leader

Best Regards

Feras Abualrub

#2

ببساطة لا يوجد تجاوب لأنك لو نظرت للكونسول (في أدوات المطور) سترى بأنك حصلت على خطأ same-origin policy.

لحل مشكلتك بدون استخدام proxies مثل cURL وغيرها، عليك أن تملك القدرة على التحكم بإعدادات الـ web server على الجهاز الثاني.

انظر هذا الموقع: http://enable-cors.org

في حال كان الجهاز الثاني يعمل بـ Apache فكل ما في الأمر هو أن تضيف

Access-Control-Allow-Origin: *

لتضيف إمكانية الوصول لجميع الـ domains

أو يمكنك السماح لـ domain محدد أو أكثر حسب رغبتك

Access-Control-Allow-Origin: http://example.com:8080 http://foo.example.com

هذه التدوينة تتفلسف قليلاً حتى تعطيك الطريقة بشكل أوضح: http://harthur.wordpress.com/2009/10/15/configure-apache-to-accept-cross-site-xmlhttprequests-on-ubuntu/

4

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

مشكور اخي على ردك ، سوف اقوم بقراءة مل زودتني به واخبرك ان نجحت ، لكن سؤال : code الذي قمت انا بكتايته يمكن استخدامه للغاية المطلوبة؟ صحيح؟

If your actions inspire others to dream more, learn more, do more and become more, you are a leader

Best Regards

Feras Abualrub

#4

بعد السماح بالوصول للجهاز الآخر من خلال cross-site requests فالجواب نعم، ستتمكن من استخدام XHR كما لو كان موقعك الخاص.

لكن انتبه إلى أن الـ domain يجب أن يتطابق بالكامل وأيضاً البورت.. أي أن blog.arabteam2000.com يختلف عن arabteam2000.com ويختلف بدوره عن arabteam2000.com:81

التفاصيل كلها مذكورة في الموقع الذي أعطيته رابطه.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5

يمكن أيضا حل المشكله بطريقه ملتويه :) وذلك عن طريق إرسال أوامر الأجاكس إلى موقعك الأم الذي أنت فيه ومن ثم تقوم بعمل طلب إرسال عن طريق الداله curl وإستقبال النتائج وعرضها لتظهر إليك وكأنها تمت على سيرفر آخر

CMS Sfhati , Website Generator


نظام إدارة المحتوى صفحتي ... جربه الآن 


 


small-logo.png

#6

لقد قمت بتنفيذ التعليمات في الروابط التي تم كتابتها من قبل الاخ : Xacker

ولكن للاسف لم ينجح شيء معي

لقد قمت بارفاق الملفات التي اعمل عليها وهي قصيرة وسهلة الفهم وتحتوي على ملفين php

الذي اقوم به حاليا هو تشغيل عملية معينة موجودة على ال server الاخر في ال background ومن ثم اظهار المخرجات الى ملف log.txt ومن ثم قراءة هذا الملف اول باول لاعرض المخرجات على الشاشة للمستخدم عن طريق ملف do9.php

الملف الاول: do9.php يجب ان يكون متواجد على الجهاز المحلي وهو يحتوي على كود ajax يقوم بالتحقق من ان حجم الملف المراد قرائته والموجود على السيرفر الاخر قد وصل لنهايته ولا يوجد اية مخرجات اخرى وبالتالي يطبع done

الملف الثاني: check9.php يجب ان يكون على ال server الاخر ويحتوي على كود يطبع محتويات log.txt ويرجعها للمستخدم طبعا عن طريق ajax الموجودة في do9.php

ارجو من الاخوة الذين لديهم الخبرة المساعدة والنصيحة

output.rar

If your actions inspire others to dream more, learn more, do more and become more, you are a leader

Best Regards

Feras Abualrub

#7

طبعا اذا قمت بوضع الملفات جميعا على ال server الموجود عليه check9.php اي ان جميع الملفات موجودة على server واحد فانه يعمل من دون اية مشاكل

الصورة في المرفقات

post-180714-099566700 1344334586_thumb.j

المرفقات
output.jpg

تم تعديل هذه المشاركة بواسطة feras jamal في 7 أغسطس 2012 في 13:16

If your actions inspire others to dream more, learn more, do more and become more, you are a leader

Best Regards

Feras Abualrub

#8

استعرض HTTP request / reply بين السيرفر الأول والثاني وضع محتواه هنا.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#9

بصراحة ما عندي هالخبرة بالذي تتكلم عنه ، ممكن تعطيني ال code الخاص بها

If your actions inspire others to dream more, learn more, do more and become more, you are a leader

Best Regards

Feras Abualrub

#10

في Firefox مثلاً

قمت بتثبيت إضافة Live HTTP headers

في Chrome

من أدوات المطوّر

قم باختيار التبويب Network

سيعرض لك جميع الـ resources التي تم طلبها من domains أخرى

انقر على الصفحة التي تريد الارتباط معها (print.php حسبما أرى في الشفرة في مشاركاتك السابقة)

ثم اختر التبويب Headers الذي سيظهر إلى اليمين وانسخ محتوياته هنا.

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#11

هذا بالنسبة للصفحة الموجودة على local

http://localhost/Thread/do9.php

GET /Thread/do9.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/Thread/

HTTP/1.1 200 OK
Date: Tue, 07 Aug 2012 11:19:45 GMT
Server: Apache/2.2.21 (Win32) PHP/5.3.8
X-Powered-By: PHP/5.3.8
Content-Length: 1178
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
----------------------------------------------------------
http://savingsslider-a.akamaihd.net/loaders/1036/l.js?aoi=1311798366&pid=1036&zoneid=12768

GET /loaders/1036/l.js?aoi=1311798366&pid=1036&zoneid=12768 HTTP/1.1
Host: savingsslider-a.akamaihd.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/Thread/do9.php
If-Modified-Since: Mon, 06 Aug 2012 19:05:20 GMT

HTTP/1.1 304 Not Modified
Content-Type: application/x-javascript
Last-Modified: Mon, 06 Aug 2012 19:05:20 GMT
Expires: Tue, 07 Aug 2012 11:19:44 GMT
Date: Tue, 07 Aug 2012 11:19:44 GMT
Connection: keep-alive
Vary: Accept-Encoding
----------------------------------------------------------

هذا بالنسبة للصفحة الموجودة على server

http://192.168.3.1/feras/check9.php

GET /feras/check9.php HTTP/1.1
Host: 192.168.3.1
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://192.168.3.1/feras/

HTTP/1.1 200 OK
Date: Tue, 07 Aug 2012 11:24:27 GMT
Server: Apache/2.2.21 (Fedora)
X-Powered-By: PHP/5.3.10
Content-Length: 1633
Connection: close
Content-Type: text/html; charset=UTF-8
----------------------------------------------------------
http://savingsslider-a.akamaihd.net/loaders/1036/l.js?aoi=1311798366&pid=1036&zoneid=12768

GET /loaders/1036/l.js?aoi=1311798366&pid=1036&zoneid=12768 HTTP/1.1
Host: savingsslider-a.akamaihd.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://192.168.3.1/feras/check9.php
If-Modified-Since: Mon, 06 Aug 2012 19:05:20 GMT

HTTP/1.1 304 Not Modified
Content-Type: application/x-javascript
Last-Modified: Mon, 06 Aug 2012 19:05:20 GMT
Expires: Tue, 07 Aug 2012 11:24:28 GMT
Date: Tue, 07 Aug 2012 11:24:28 GMT
Connection: keep-alive
Vary: Accept-Encoding
----------------------------------------------------------

تم تعديل هذه المشاركة بواسطة feras jamal في 7 أغسطس 2012 في 14:26

If your actions inspire others to dream more, learn more, do more and become more, you are a leader

Best Regards

Feras Abualrub

#12

أريدك أن تزودنا بالـ headers بين do9.php و check9.php

يعني الـ headers يجب أن تحوي على طلب من الأول للثاني بحيث يكون الطلب cross domain لنرى ما الذي سيعيده Apache في الـ response.

ما أراه في الأعلى هو أنك قمت بفتح كل صفحة في سيرفرها ونسخت الـ headers (واضح من الـ Referer)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#13

عند تشغيل الصفحة الاولى التي تطلب من الثانية يعطيني في live http header

http://localhost/Thread/do9.php

GET /Thread/do9.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/Thread/

HTTP/1.1 200 OK
Date: Tue, 07 Aug 2012 11:19:45 GMT
Server: Apache/2.2.21 (Win32) PHP/5.3.8
X-Powered-By: PHP/5.3.8
Content-Length: 1178
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html
----------------------------------------------------------
http://savingsslider-a.akamaihd.net/loaders/1036/l.js?aoi=1311798366&pid=1036&zoneid=12768

GET /loaders/1036/l.js?aoi=1311798366&pid=1036&zoneid=12768 HTTP/1.1
Host: savingsslider-a.akamaihd.net
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:14.0) Gecko/20100101 Firefox/14.0.1
Accept: */*
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/Thread/do9.php
If-Modified-Since: Mon, 06 Aug 2012 19:05:20 GMT

HTTP/1.1 304 Not Modified
Content-Type: application/x-javascript
Last-Modified: Mon, 06 Aug 2012 19:05:20 GMT
Expires: Tue, 07 Aug 2012 11:19:44 GMT
Date: Tue, 07 Aug 2012 11:19:44 GMT
Connection: keep-alive
Vary: Accept-Encoding
----------------------------------------------------------

هل هناك طريقة اخرى للحصول على ما طلبته

If your actions inspire others to dream more, learn more, do more and become more, you are a leader

Best Regards

Feras Abualrub

#14

غريب

الـ headers لا يظهر فيها أي طلب GET/POST إلى check9.php

تأكد من أن طلب Ajax يعمل (هل ما زال الخطأ يظهر في الكونسول .. ما نص الخطأ)

Firefox يملك أدوات مطور أيضاً.. ولكن أنصح باستخدام firebug وانظر الخطأ في الكونسول

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#15

انا استعما ال firebug والغريب واللي محيرني انه لا يعطيني اي خطا على الويب console

هل عندك طريقة لاستخدام الcurl وتطبيق نفس اللي انا اعمل عليه حاليا

If your actions inspire others to dream more, learn more, do more and become more, you are a leader

Best Regards

Feras Abualrub

مواضيع مشابهة