2012-01-08 3 views
1

У меня возникают небольшие трудности. В основном я отправляю информацию из формы через jQuery и AJAX в MySQL, а затем возвращаю значение обратно в мое приложение.Передача значений через 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); 
      });      
     },      
     error: function(){      
      //Do Stuff      
     } 
    }) 
} 

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

$orderId = mysql_insert_id(); 

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

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

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

Благодаря Рори

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

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

({"orderId":125}) 
+0

Не могли бы вы опубликовать простой текст JSON, возвращаемый вашей страницей PHP. –

+0

Извините, я пропустил это, я добавил его на мой вопрос. –

ответ

1

Аякса вызов асинхронно. Это означает, что вызов 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

Вам нужно будет показать нам, как выглядит возвращенный JSON и какой код вы пытались. Если 'alert()' внутри '.each()' работает, то, очевидно, данные есть, поэтому речь идет только о том, какой код вы используете для доступа к нему. Мы можем только помочь, если знаем, как выглядят данные и что вы пытались, что не сработало. – jfriend00

+0

Я поставил JSON в качестве последней части моего вопроса, я использую данные [index] .orderId внутри предупреждения, это, очевидно, неправильно, поэтому я пытаюсь разобраться, что именно я поставил в предупреждение, чтобы просто поп up number –

+0

Если 'data' в вашем обработчике успеха не более чем' {"orderId": 125} ', то вы можете получить доступ к' orderId' с помощью этого 'data.orderId'. – jfriend00

0

Вы должны изменить ваши 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); 
     } 
    }); 
} 

Затем вызовите it:

submitDeliveryDetails({ 
    success: function(order) { 
     alert(order.orderId); 
    }, 
    error: function(xhr, status, err) { 
     // Do Stuff 
    } 
); 
Смежные вопросы