2015-06-24 2 views
1

Я хочу написать код для возврата некоторых данных из вызова aJax.Uncaught SyntaxError: Неожиданный токен) при вызове функции

Вот ресурс, который я имею в виду: http://www.w3schools.com/jquery/ajax_ajax.asp

Вот код, который я написал:

var data = getData("http://www.file.txt", function(result)); 
alert(data); 

function getData(dataUrl, result) 
{ 
    $.ajax({url: dataUrl, success: function(result){ 
     return result; 
    }}); 
} 

Я получаю следующее сообщение об ошибке:

Uncaught SyntaxError: Unexpected token)

В эта строка кода:

var data = getData("http://www.file.txt", function(result)); 

Кроме того, приведенный выше код эффективен при получении больших объемов данных?

Благодаря

+0

Мм, 'функция (результат)' является началом выражения функции, но не хватает его тело. Тело [в котором «предупреждение (результат)» должно идти] (http://stackoverflow.com/q/14220321/1048572). Кроме того, «return result» в вашем обратном вызове 'success' не работает точно. – Bergi

+3

Можете ли вы объяснить, что вы ожидаете от 'function (result)' to? –

+1

У меня возникает соблазн закрыть это как дубликат http://stackoverflow.com/q/14220321/218196 (из-за первой строки), но я чувствую, что ваша фактическая проблема - это отсутствие понимания того, как обратные вызовы (и, возможно, даже функции) работают в JS. –

ответ

-1

Вы не проходя скобки, так что вы получите неперехваченного SyntaxError: Неожиданный маркер) ошибки

var data = getData("http://www.file.txt", function(result){}); 

Но я думаю, что вы должны использовать функцию, как это

function getData() { 
    return Promise(function(resolve, reject) { 
    $.ajax({ 
     // ... 
     success: function(data) { 
     resolve(data); 
     }, 
     error: function(jqxhr, status, error) { 
     reject(error); 
     } 
    }); 
    }); 
} 

getData("http://www.file.txt").then(function(result) { 
console.log(result); 
}).catch(function() { 
    // an error occurred 
}); 

+0

вы пробовали мою консоль кода, она работает man –

+0

Передача 'callback (result)' столь же неверна. – Bergi

+0

это просто пример, почему op get error, поэтому я дал объяснение @bergi –

-1

Если вы используете Ajax вызов, то вы должны использовать success или .then с ним, чтобы быть выполнен в виде обратного вызова после приема данных.

Код должен быть только это:

var data = ''; 
$.ajax({url: dataUrl, success: function(result){ 
     data = result; 
     alert(data); 
    }}); 
+0

Можете ли вы объяснить, какая разница между вашим кодом и OP код есть? –

+0

[Это не работает] (http://stackoverflow.com/q/14220321/1048572) – Bergi

+0

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

0

Это не правильный синтаксис для обратного вызова, а также асинхронный вызов не совсем работает так. Попробуйте это вместо этого - data установлен в обратном вызове.

var data; 
getData("http://www.file.txt"); 

function getData(dataUrl) 
{ 
    $.ajax({url: dataUrl, success: function(result){ 
     data = result; 
     alert(data);    
    }}); 
} 
+0

Почему эта глобальная переменная 'var data'? – Bergi

+0

'data' просто не совсем глобально, просто в том, что закрывает этот фрагмент.' Result', потому что я его пропустил;) –

+0

Конечно, это бесплатно («глобально») на 'getData'. Асинхронные вызовы не работают так. Нет причин иметь его в этой области (в зависимости от того, какая область видимости). – Bergi

0

Из основ JavaScript функция должна удовлетворять следующим требованиям.

  1. Функция JavaScript определяется с помощью ключевого слова function, за которым следует имя, за которым следуют скобки().
  2. Функция в основном объект JavaScript. Итак, скобки необходимы, поскольку они выделяют функцию из других элементов вашего скрипта или веб-страницы.

Так что строка кода на самом деле неверна.

var data = getData("http://www.file.txt", function(result)); 

Это должно быть либо нижеследующее.

var data = getData("http://www.file.txt", function(result) { 
    //anonymous function body 
}); 

или

var data = getData("http://www.file.txt", callbackFn(result)); 

function callbackFn(result) { 
    //function body goes here. 
} 
Смежные вопросы