Используя jquery, как вы работаете с POST между сайтами аналогично заполнению данных для GET JQuery между сайтами? - PullRequest
1 голос
/ 04 июня 2010

Мы опубликовали API-интерфейс json для обмена данными между несколькими доменами. Мы предоставляем обратный вызов, который позволяет возвращать любые GET с удаленных сайтов в виде дополненного json.

GET http://mysite.com/jsonapi/object?callback=?

Возвращает:? ({‘SomeKey’: ’someData’})

Теперь все это прекрасно работает, когда мы ПОЛУЧАЕМ данные с удаленных сайтов, но в тот момент, когда я пытаюсь выполнить удаленный JQuery POST для API для извлечения данных JSON, я получаю нулевой возврат в Firefox. Я могу без проблем опубликовать форму с удаленного сайта в json API и получить обратно данные json. Проблема возникает только с JQuery POST. Я полагаю, что это своего рода защита от межсайтовых скриптов, которую я не совсем понимаю. Когда я отправляю данные POST JQuery на URL-адрес на том же сайте, с которого я загружаю страницу POSTing JQuery, у меня не возникает проблема.

Как сделать сообщение jquery на удаленном сайте и обработать данные json, которые я получил? Я могу добавить обратный вызов или внести другие изменения в возвращаемые данные json, и я не беспокоюсь о безопасности. Я просто хочу, чтобы jquery опубликовал форму, а не передавал параметры как GET.

Как бы я изменил это для JQuery POST для удаленного сайта?

<form method="post" action="http://www.remoteSite.com" name="input">
        Quick form to test update public data:<br>
        New data:<input type="text" value="New Data" name="newData"><br>
        <input type="submit" value="Submit">
</form>

<script src="_js/jquery-1.4.2.min.js" type="text/javascript"> </script>
<script type="text/javascript">
$("form").submit(function(e){
    var form = $(this);
    $.ajax({ 
         url   : form.attr('action'),
         method: form.attr('method'),
         data  : form.serialize(), // data to be submitted
         success: function(response){
            alert(response); // do what you like with the response
         }
    });
    return false;
 });
</script>

В настоящее время это возвращает [Приложение JavaScript] в качестве предупреждения, а не ожидаемые данные, возвращаемые json.

Ответы [ 2 ]

3 голосов
/ 04 июня 2010

Политика того же происхождения срабатывает, когда вы пытаетесь опубликовать через javascript, очевидные причины этого включают публикацию потенциально конфиденциальной информации без ведома пользователя (через ajax). Jquery поддерживает JSONP, этот метод позволяет отправлять данные на сайт за пределами вашего домена, и это происходит путем динамического создания на вашей странице элемента, который оборачивает ответ в вызов функции. Однако следует отметить, что вы не можете выполнить POST с элементом, который запрашивается через GET.

$.ajax({
     url   : form.attr('action'),
     method: form.attr('method'),
     data  : form.serialize(), // data to be submitted
     success: function(response){
        alert(response); // do what you like with the response
     },
     dataType: 'jsonp'
});
0 голосов
/ 04 июня 2010

Междоменный JSONP вообще не является AJAX. Он не использует XMLHttpRequest. Это не более чем динамический элемент скрипта, который загружает код JavaScript.

Таким образом, используя ajax, нет способа получить междоменную публикацию. Но если вы отправляете форму, вы можете сделать несколько хакеров iframe, чтобы сделать скрытую запись iframe на удаленном сайте, а затем встроить удаленный сайт, и iframe вашего локального сайта передает данные, которые вы хотите передать обратно, затем вызовите JavaScript Перезвоните. (Многое, как фейсбук коннект работал). Но если вам не нужно делать пост, не делайте этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...