jquery Senden Cross-Domain-Daten über die A $ .post
Frage
Ich versuche, Daten über zu einem cakephp (MVC) Website zu senden, über $ .post (). unten ist der Code
$('#testReq').click(function () {
console.log('Button Works');
$.post('http://play.anthonylgordon.com/usersessions/store/', { data: 'test7' }, function (data) {
//data contains the json object retrieved.
console.log(data.status);
}, "json");
})
Im Folgenden finden Sie die cakephp Daten, die die Daten und speichert sie abruft. Wenn Sie wissen, Kuchen, großartig, aber wenn nicht, es ist in Ordnung. Ich versuche wirklich, um herauszufinden, ob ich die Daten richtig schicke
<?php
class UsersessionsController extends AppController {
var $name = 'Usersessions';
var $helpers = array('Html', 'Form','Ajax');
var $components = array('RequestHandler');
function store()
{
Configure::write('debug', 0);
$this->autoRender = false;
echo 'hello';
if ($this->params['url']['data'])
{
$this->data['Usersession']['data'] = $this->params['url']['data'];
$this->Usersession->Save($this->data);
echo 'Success';
}
}
}
?>
Wie Sie sehen, ich ‚Hallo‘ setzen, bevor es jede Auswertung ist. Ich soll zu sehen, dass in meiner Konsole fähig sein, aber ich nicht. Ich habe versucht, diese Methode mit dem bekommen, und ich habe die Antwort sehen ‚hallo‘. Welche wird mich zu dem Schluss verlassen, dass Sie keine Daten CROSS-Domain über $.post
schicken. Die einzige Methode, die zu funktionieren scheint ist getJSON()
es sei denn, jemand beweisen kann mich nicht falsch.
Lösung
Sie können keine normalen Cross-Domain-AJAX-Anfragen ausführen. Sie müssen verwenden JSONP und das funktioniert nur mit GET-Anforderungen (das ist, weil jquery ein spritzt script
-Tag auf das DOM, um die Anfrage und einen script
Tag auszuführen nur Javascript holen verwenden GET).
Andere Tipps
Wenn Sie in der Lage sein wollen Anfragen Cross-Domain zu tun, müssen Sie einen HTTP-Proxy auf Ihrer Domain implementieren, die HTTP-Anforderungen in Ihrem Namen über eine Server-Seite Utility / Bibliothek wie Locken oder Apache Httpclient oder so etwas.
Bearbeiten: JSONP ist eine Lösung, aber ich würde es nicht empfehlen, wenn Sie nur GET-Anfragen müssen machen (denn das ist alles, das funktioniert). JSONP ist auch nicht unbedingt REST-freundlich, vor allem in Ihrem Fall, in dem Sie eine POST-Anforderung vornehmen müssen. Wenn POST die Semantik Ihrer Ressource erfüllt und wie Sie beabsichtigen, sie zu manipulieren, Schalten, nur um zu verwenden JSONP fühlt sich hässlich zu mir.