Отправка значений через AJAX и возврат значения - PullRequest
1 голос
/ 08 января 2012

У меня небольшие трудности.По сути, я отправляю информацию из формы через jQuery и AJAX в MySQL, а затем возвращаю значение обратно в мое приложение.

Я могу добавить информацию в свою БД, но не могу понять, как ее получитьидентификатор вставленных данных.Вот мой код -

function submitDeliveryDetails(){
    $.ajax({                       
        url: "http://www.mydomain.co.uk/mobileapp/add_deliverydetails.php?callback=jsonp1",
        data: addDeliveryData, // Variable holding said delivery information
        jsonp: "callback",
        dataType: "jsonp",
        success: function(data) {
            $.each(data, function(index) {
                alert(data[index].orderId);
            });                       
        },                     
        error: function(){                       
            //Do Stuff                       
        }
    })
}

Это отправляет информацию в порядке.Я могу добавить в БД и использовать следующее, чтобы вернуть идентификатор

$orderId = mysql_insert_id();

Затем я создаю формат JSON для этого значения,

$orderIdArray = array('orderId'=>$orderId);
echo $_GET['callback'].'('.json_encode($orderIdArray).')';

Когда я просматриваю это в FireBug,Я могу видеть удостоверение личности. Мне нужно руководство, как обработать это удостоверение, чтобы вернуть его в мое приложение, так как я получаю «неопределенное», делая вещи по-своему!

Спасибо, Рори

PS Я использую JSONP, так как имею дело со сценариями в отдельном домене.

Простой текст JSON -

({"orderId":125})

Ответы [ 2 ]

1 голос
/ 08 января 2012

Ajax-вызов асинхронный. Это означает, что вызов ajax завершается, и следующие функции в вашем коде продолжают выполняться, пока выполняется вызов ajax и до его завершения. Поэтому ЕДИНСТВЕННОЕ место, где вы можете сделать что-либо с возвращаемым значением, находится в обработчике успеха для функции ajax или в любых функциях, которые вы вызываете оттуда.

Это требует изменения потока вашего кодирования, но вам нужно сделать вызов ajax, а затем продолжить выполнение в обработчике успеха после успешного завершения вызова ajax.

Концептуально это так:

function submitDeliveryDetails(){
    $.ajax({                       
        url: "http://www.mydomain.co.uk/mobileapp/add_deliverydetails.php?callback=jsonp1",
        data: addDeliveryData, // Variable holding said delivery information
        jsonp: "callback",
        dataType: "jsonp",
        success: function(data) {
            $.each(data, function(index) {
                alert(data[index].orderId);
            });                       
            // you can now continue on here with whatever you wanted to do 
            //    with the the returned JSON data
            // You can operate on the data here or call other functions 
            //    (passing the data as an argument to those functions)
        },                     
        error: function(){                       
            //Do Stuff                       
        }
    })
}

submitDeliveryDetails();
// nothing else to do here because the ajax call has not completed yet
// so the returned results from the ajax call is not available yet
0 голосов
/ 08 января 2012

Вам следует изменить функцию submitDeliveryDetails, чтобы она выполняла обратные вызовы об успешном выполнении и об ошибках, а затем вызывать те из ajax jQuery: успех и ошибка:

function submitDeliveryDetails(options){
    $.ajax({                       
        url: "http://www.mydomain.co.uk/mobileapp/add_deliverydetails.php?callback=jsonp1",
        data: addDeliveryData, // Variable holding said delivery information
        jsonp: "callback",
        dataType: "jsonp",
        success: function(data) {
            if (options && typeof(options.success) === 'function' ) options.success(data);
        },                     
        error: function(xhr, status, err){                       
            if (options && typeof(options.error) === 'function' ) options.error(xhr, status, err);
        }
    });
}

Затем вызвать ее:

submitDeliveryDetails({
    success: function(order) {
       alert(order.orderId);
    },
    error: function(xhr, status, err) {
       // Do Stuff
    }
);
...