Ajax, jquery, mysql, как передать переменную [duplicate]

Похоже, вы пытаетесь запустить adb на самом устройстве. Чтобы перетащить файлы, запустите adb на главном компьютере. Чтобы отключить ваш тип сеанса adb shell exit.

Вы не можете запустить adb push на оболочке Android. Вы должны запустить его на главном компьютере.

Если это не так, опубликуйте вывод echo $PATH.

70
задан user398341 21 July 2010 в 20:46
поделиться

7 ответов

Проблема в том, что вы не можете вернуть значение из асинхронного вызова, например, запрос 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
}
94
ответ дан user113716 21 August 2018 в 10:47
поделиться
  • 1
    Вы можете вернуть значение из запроса AJAX, но это только если вы сделаете его неасинхронным (установите параметр 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
  • 2
    & Quot; Non-асинхронная & Quot; конечно, можно также назвать «синхронным», ;) – Charles Wood 3 February 2014 в 19:43
  • 3
    в обоих предложенных вами методах; я. запустите функцию с успехом, тогда вам нужно написать несколько ajax для разных сценариев. это не поможет создать глобальную оболочку ajax, движок. – wpcoder 3 November 2017 в 23:45

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

Что сработало для меня, делал что-то вроде этого:

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

6
ответ дан anakin 21 August 2018 в 10:47
поделиться

Есть много способов получить ответ JQuery AJAX. Я разделяю с вами два общих подхода:

Сначала:

использовать async = false и внутри функции возвращать ajax-объект, а позже получить ответ ajax-object.responseText

/**
 * 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

/**
 * 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);

вы можете сделать его настолько большим, насколько хотите ...

28
ответ дан Brigo 21 August 2018 в 10:47
поделиться
  • 1
    Хорошая идея, но ajaxObj['responseText'] не существует, когда вы определяете var ajaxResponse – mu3 20 August 2014 в 02:27
  • 2
    Отлично!! ваше первое решение спасло меня – Kallel Omar 5 May 2015 в 11:02
  • 3
    второй метод - 100% A OK! ;) – Schalk Keun 24 February 2016 в 15:27
  • 4
    Начиная с jQuery 1.8, использование async: false устарело! – mikwee 25 February 2017 в 15:14

Это довольно старый и уродливый, не делайте этого. Вы должны использовать обратные вызовы: 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;
}
2
ответ дан Community 21 August 2018 в 10:47
поделиться
  • 1
    вам также нужно добавить здесь 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, см. пример

1
ответ дан Joshua Burns 21 August 2018 в 10:47
поделиться

Привет, попробуйте async: false в вашем вызове ajax ..

-1
ответ дан kathir 21 August 2018 в 10:47
поделиться

Добавьте async: false в список ваших атрибутов. Это заставляет поток javascript ждать, пока возвращаемое значение не будет извлечено, прежде чем двигаться дальше. Очевидно, что вы не захотите делать это в каждом случае, но если значение необходимо для продолжения, это будет сделано.

3
ответ дан nietonfir 21 August 2018 в 10:47
поделиться
  • 1
    Вы никогда не должны устанавливать async: false. Это блокирует каждый элемент на странице в течение времени извлечения. Вы знаете, что означает A в AJAX: Асинхронный. Правильным ответом будет то, что OP должен правильно использовать обратный вызов success(). – nietonfir 1 November 2013 в 22:49
  • 2
    Я признал, что все должно подождать. При определенных обстоятельствах вызывающей функции может потребоваться возвращаемое значение, например, добавление новой записи и необходимость возврата идентификатора записи. Когда вы знаете правила, вы знаете, когда их можно сломать. Никогда не говори никогда. Вот кто-то другой, кто соглашается. ( stackoverflow.com/questions/3880361/… [/ д0]) – Hoodlum 20 December 2013 в 21:05
  • 3
  • 4
    @nietonfir Почему опция существует? – Charles Wood 3 February 2014 в 19:44
  • 5
    @CharlesWood Единственно для тех, кто не может понять асинхронный характер ajax. – nietonfir 4 February 2014 в 11:04
Другие вопросы по тегам:

Похожие вопросы: