результат обратного вызова jquery mobile и json не отображается

#jquery #mysql #json

#jquery #mysql #json

Вопрос:

Я создаю мобильное приложение jquery, которое позволяет пользователям публиковать и просматривать темы через json. серверная сторона использует инъекции php и mysql для сбора данных json. Серверная сторона видит переданное значение и успешно вводит его в sql. Проблема в том, что он не запускает результат успешного обратного вызова.

Этот журнал ошибок отображается на консоли Chrome: "XMLHttpRequest cannot load http://xxxxxxx/newpost.php. Origin null is not allowed by Access-Control-Allow-Origin." И если я добавлю dataType: "jsonp" в параметры, ошибка изменится на "Uncaught ReferenceError: SUCCESS is not defined."

Вот мой html:

 <div data-role="content">
            <div data-role="content">
                <form id="newPostForm">
                    <div data-role="fieldcontain">
                        <label for="postTitle"><strong>Post Title:</strong></label>
                        <input type="text" name="postTitle" id="postTitle" value=""  />

                        <label for="postContent"><strong>Post Content:</strong></label>
                        <textarea name="postContent" id="postContent"></textarea>

                        <fieldset class="ui-grid-a">
                            <div class="ui-block-a"><a href="#indexPage" id="cancel" data-role="button">Cancel</a></div>
                            <div class="ui-block-b"><button data-theme="b" id="submit" type="submit">Submit</button></div>
                        </fieldset>
                        <h3 id="notification"></h3>
                    </div>
                </form>
            </div>
        </div>
 

сценарий:

 function resetTextFields()
        {
            $("#postTitle").val("");
            $("#postContent").val("");
        }

        function onSuccess(data, status)
        {
            resetTextFields();
            // Notify the user the new post was saved
            $("#notification").fadeIn(2000);
            data = $.trim(data);
            if(data == "SUCCESS")
            {
                $("#notification").css("background-color", "#ffff00");
                $("#notification").text("The post was saved");
            }
            else
            {
                $("#notification").css("background-color", "#ff0000");
                $("#notification").text(data);
            }
            $("#notification").fadeOut(5000);
        }

        $(document).ready(function() {
            $("#submit").click(function(){

                var formData = $("#newPostForm").serialize();

                $.ajax({
                    type: "POST",
                    url: "http://xxxxxxxx/newpost.php",
                    cache: false,
                    data: formData,
                    success: onSuccess
                });

                return false;
            });

            $("#cancel").click(function(){
                resetTextFields();
            });

            $("#refresh").click(function(){
                location.reload();
            });
        });
 

и вот php-код:

 header('Content-type: application/json');
    try
    {
        $connection = mysql_connect("localhost","user","pass");
        mysql_select_db("dbtable", $connection);

        $postTitle = mysql_real_escape_string($_POST[postTitle]);
        $postContent = mysql_real_escape_string($_POST[postContent]);

        mysql_query("INSERT INTO weblogins (postTitle, postContent) VALUES ('$postTitle', '$postContent')");
        mysql_close($connection);
        echo "SUCCESS";
    }
    catch(Exception $e)
    {
        echo $e->getMessage();
    }
 

При нажатии кнопки на стороне клиента ничего не происходит, никаких уведомлений, но он вводит отправленную форму в sql.

Что я пропустил? Спасибо.

Комментарии:

1. вы тестируете Chrome или его аналогичное поведение в любом другом браузере? попробуйте добавить www в свой URL-адрес или попробуйте без http , т.е. /xxxxxxx/newpost.php

2. Я сделал это, но результат тот же

Ответ №1:

Вы не можете отправлять / получать с помощью AJAX в домен, который не является текущим ….

Он вызывает ту же политику происхождения -> http://en.wikipedia.org/wiki/Same_origin_policy

и когда вы добавили следующую строку

 dataType: "jsonp",
 

вы добавили запятую в конце … ?

Комментарии:

1. если это нарушение той же политики происхождения, почему внедрение прошло успешно? это дает мне идею, но я действительно в замешательстве.

2. @SaintShann произошла ли инъекция, когда у вас была настройка JSONP? это имело бы смысл — ошибка была при обратном вызове … т.е. он был обработан, но не смог успешно выполнить

3. @SaintShann и я думаю, вам нужно добавить jsonpCallback -> api.jquery.com/jQuery.ajax