मैं सरल आरईएसटी कॉल के साथ कॉर्डोवा एपीपी का निर्माण कर रहा हूं।कॉर्डोवा AJAX पोस्ट अनुमति
मुद्दा है जब मैं पोस्ट के साथ एक AJAX बनाने, क्रोम मुझे भेजता है: "XMLHttpRequest लोड नहीं कर सकता http://192.168.1.111/project/app preflight के लिए प्रतिक्रिया अमान्य HTTP स्थिति कोड 405 है।" कंसोल पर।
लेकिन, अगर मैं जीईटी (मूल रूप से डेटाबेस से मूल्य लौटाता हूं) के साथ एक AJAX कॉल करता हूं तो चीजें एक आकर्षण की तरह काम करती हैं।
मेरे AJAX कॉल है: बाकी
require 'Slim/Slim.php';
$app = new Slim();
$app->post('/app', 'addApp');
$app->run();
function addApp() {
error_log('addApp\n', 3, '/var/tmp/php.log');
$request = Slim::getInstance()->request();
$callback = json_decode($request->getBody());
$sql = "INSERT INTO app (name) VALUES (:name)";
try {
$db = getConnection();
$stmt = $db->prepare($sql);
$stmt->bindParam("name", $callback->name);
$stmt->execute();
$callback->id = $db->lastInsertId();
$db = null;
echo json_encode($callback);
} catch(PDOException $e) {
error_log($e->getMessage(), 3, '/var/tmp/php.log');
echo '{"error":{"text":'. $e->getMessage() .'}}';
}
}
function getConnection() {
$dbhost="localhost";
$dbuser="myuser";
$dbpass="mypass";
$dbname="mydb";
$dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $dbh;
}
में
$.ajax({
url: "http://192.168.1.111/project/app",
type: "POST",
dataType: "json",
contentType: 'application/json',
data: {
"name": "Cordova"
},
success: function() {
navigator.notification.alert("Success!");
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus + jqXHR.responseText);
}
});
पोस्ट हैंडलर मैं क्या कोशिश की है:
1 #: config में पहुँच मूल .xml
<access origin="*" />
2 #: मेटा टैग
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *; connect-src 'self' http://192.168.1.111">
3 # कनेक्ट-src मेरे आईपी जोड़ें: मेरी बाकी ऐप्लिकेशन में पहुंच-नियंत्रण-अनुमति दें-उत्पत्ति जोड़े .htaccess
Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Methods: "GET,POST,OPTIONS,DELETE,PUT"
4 #: जावास्क्रिप्ट में
समर्थन CORS जोड़े$.support.cors = true;
$.mobile.allowCrossDomainPages = true;
5 #: यदि सर्वर पोस्ट में त्रुटि नहीं है की जाँच करने के लिए, मैं कर्ल का इस्तेमाल किया और सामान्य काम करता है (सफलता)
curl -i -X POST -H 'Content-Type: application/json' -d '{"name": "Cordova"}' http://192.168.1.111/project/app
OBS: मैं आराम करने के लिए स्लिम ढांचे का उपयोग कर रहा (http://coenraets.org/blog/2011/12/restful-services-with-jquery-php-and-the-slim-framework/)
================
अद्यतन # 1:
मैंने अपना डेटाबेस और एप्लिकेशन ऑनलाइन होस्ट में अपलोड कर लिया है और परिणाम अभी भी वही हैं।
================
अद्यतन # 2:
एक और परीक्षण कर रहा, मैंने देखा कि contentType को हटाने: "application/json " डीबगर एक और त्रुटि दिखाता है।
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'name' cannot be empty
================
यह है कि मैं इस और कुछ भी नहीं एक समाधान के रूप में प्रकट होता है हल करने के लिए कोशिश कर रहा हूँ दो दिन हो गया है।मैं वास्तव में दुखी हूँ।
आप सर्वर पोस्ट का समर्थन नहीं करते हैं, तो आप आपको एक्शन कोड दिखा सकते हैं? – Naumov
@Naumov क्षमा करें, मैं उस बिंदु को भूल गया, मैंने अपना प्रश्न अपडेट कर लिया है। सर्वर पोस्ट काम कर रहा है, मैंने इसका परीक्षण करने के लिए कर्ल का उपयोग किया है। – reidark
मुझे लगता है कि शायद यह आपकी मदद करेगा http://stackoverflow.com/questions/298745/how-do-i-send-a-cross-domain-post-request-via-javascript और 'url: "http: //192.168 .1.111/प्रोजेक्ट/ऐप "'शमा के साथ यूआरएल आज़माएं' http: //' – Naumov