Похоже, вы пытаетесь запустить adb
на самом устройстве. Чтобы перетащить файлы, запустите adb на главном компьютере. Чтобы отключить ваш тип сеанса adb shell
exit
.
Вы не можете запустить adb push
на оболочке Android. Вы должны запустить его на главном компьютере.
Если это не так, опубликуйте вывод echo $PATH
.
Проблема в том, что вы не можете вернуть значение из асинхронного вызова, например, запрос AJAX, и ожидать, что он будет работать.
Причина в том, что код, ожидающий ответа, уже выполнен время ответа.
Решение этой проблемы состоит в том, чтобы запустить нужный код внутри обратного вызова success:
. Таким образом, он обращается к data
только тогда, когда он доступен.
function isSession(selector) {
$.ajax({
type: "POST",
url: '/order.html',
data: ({ issession : 1, selector: selector }),
dataType: "html",
success: function(data) {
// Run the code here that needs
// to access the data returned
return data;
},
error: function() {
alert('Error occured');
}
});
}
Другая возможность (что фактически то же самое) заключается в вызове функции внутри вашего обратного вызова success:
, который передает данные когда он доступен.
function isSession(selector) {
$.ajax({
type: "POST",
url: '/order.html',
data: ({ issession : 1, selector: selector }),
dataType: "html",
success: function(data) {
// Call this function on success
someFunction( data );
return data;
},
error: function() {
alert('Error occured');
}
});
}
function someFunction( data ) {
// Do something with your data
}
Я видел ответы здесь и, хотя они были полезны, они не были именно тем, что я хотел, так как мне пришлось изменить много кода.
Что сработало для меня, делал что-то вроде этого:
function isSession(selector) {
//line added for the var that will have the result
var result = false;
$.ajax({
type: "POST",
url: '/order.html',
data: ({ issession : 1, selector: selector }),
dataType: "html",
//line added to get ajax response in sync
async: false,
success: function(data) {
//line added to save ajax response in var result
result = data;
},
error: function() {
alert('Error occured');
}
});
//line added to return ajax response
return result;
}
Надежда помогает кому-то
anakin
Есть много способов получить ответ JQuery AJAX. Я разделяю с вами два общих подхода:
Сначала:
использовать async = false и внутри функции возвращать ajax-объект, а позже получить ответ ajax-object.responseText
blockquote>/** * jQuery ajax method with async = false, to return response * @param {mix} selector - your selector * @return {mix} - your ajax response/error */ function isSession(selector) { return $.ajax({ type: "POST", url: '/order.html', data: { issession: 1, selector: selector }, dataType: "html", async: !1, error: function() { alert("Error occured") } }); } // global param var selector = !0; // get return ajax object var ajaxObj = isSession(selector); // store ajax response in var var ajaxResponse = ajaxObj.responseText; // check ajax response console.log(ajaxResponse); // your ajax callback function for success ajaxObj.success(function(response) { alert(response); });
Second:
использовать метод $ .extend и создать новую функцию, такую как ajax
blockquote>/** * xResponse function * * xResponse method is made to return jQuery ajax response * * @param {string} url [your url or file] * @param {object} your ajax param * @return {mix} [ajax response] */ $.extend({ xResponse: function(url, data) { // local var var theResponse = null; // jQuery ajax $.ajax({ url: url, type: 'POST', data: data, dataType: "html", async: false, success: function(respText) { theResponse = respText; } }); // Return the response text return theResponse; } }); // set ajax response in var var xData = $.xResponse('temp.html', {issession: 1,selector: true}); // see response in console console.log(xData);
вы можете сделать его настолько большим, насколько хотите ...
ajaxObj['responseText']
не существует, когда вы определяете var ajaxResponse
– mu3
20 August 2014 в 02:27
Это довольно старый и уродливый, не делайте этого. Вы должны использовать обратные вызовы: https://stackoverflow.com/a/5316755/591257 Если бы такая же проблема была решена таким образом, используя глобальный var. Не уверен, что это лучший, но верно работает. При ошибке вы получаете пустую строку (myVar = ''), поэтому вы можете обращаться с ней по мере необходимости.
var myVar = '';
function isSession(selector) {
$.ajax({
'type': 'POST',
'url': '/order.html',
'data': {
'issession': 1,
'selector': selector
},
'dataType': 'html',
'success': function(data) {
myVar = data;
},
'error': function() {
alert('Error occured');
}
});
return myVar;
}
async: false
, потому что в асинхронном режиме не гарантируется сохранение data
в myVar
до возвращения myVar
.
– low_rents
3 July 2014 в 10:22
// Common ajax caller
function AjaxCall(url,successfunction){
var targetUrl=url;
$.ajax({
'url': targetUrl,
'type': 'GET',
'dataType': 'json',
'success': successfunction,
'error': function() {
alert("error");
}
});
}
// Calling Ajax
$(document).ready(function() {
AjaxCall("productData.txt",ajaxSuccessFunction);
});
// Function details of success function
function ajaxSuccessFunction(d){
alert(d.Pioneer.Product[0].category);
}
это может помочь, создать общую функцию вызова ajax и приложить функцию, которая вызывается при успешном вызове ajax, см. пример
Привет, попробуйте async: false в вашем вызове ajax ..
Добавьте async: false
в список ваших атрибутов. Это заставляет поток javascript ждать, пока возвращаемое значение не будет извлечено, прежде чем двигаться дальше. Очевидно, что вы не захотите делать это в каждом случае, но если значение необходимо для продолжения, это будет сделано.
async: false
. Это блокирует каждый элемент на странице в течение времени извлечения. Вы знаете, что означает A в AJAX: Асинхронный. Правильным ответом будет то, что OP должен правильно использовать обратный вызов success()
.
– nietonfir
1 November 2013 в 22:49
async: false
). В некоторых случаях наличие асинхронного вызова не является обязательным. Подробнее о jquery.ajax () doc api.jquery.com/jQuery.ajax , а не о том, чтоAs of jQuery 1.8, the use of async: false with jqXHR ($.Deferred) is deprecated;
– Adrien Be 12 July 2013 в 10:05