2013-06-24 2 views
0

Я пытаюсь вызвать PHP script на моем локальном сервере с jQuery внутри функции CasperJS, но почему-то я не получаю результат. Вот мой код:Не удается получить результат из скрипта PHP с помощью jQuery

casper.then(function() { 
    var result = casper.evaluate(function() { 
     var result = $.get('http://localhost/test.php', function() {}); 
     return result; 
    }); 
    result = JSON.stringify(result); 
    this.echo(result); 
    this.exit(); 
}); 

Это не имеет значения, какой URL называется, она всегда обеспечивает такой же результат:

{"abort":{},"always":{},"complete":{},"done":{},"error":null,"fail":{},"getAllRe 
sponseHeaders":{},"getResponseHeader":{},"overrideMimeType":{},"pipe":null,"prog 
ress":{},"promise":{},"readyState":1,"setRequestHeader":{},"state":{},"statusCod 
e":{},"success":null,"then":{}} 

Вещи, которые я проверил:

  • XAMP сервер работает и работа
  • Файл PHP есть
  • Любой другой URL-адрес также не работает, и del Ivers результат (смотрите выше)
  • Кроме того, функция JQuery $.load() не работает (то результат является «нулевым»)
  • JQuery загружен правильно (в противном случае CasperJS выдает ошибку)
  • Если я просто вернуть это работает (например, return "test";)

Не знаю, что делать. Спасибо за любые предложения!

ответ

1

Я рекомендовал бы изменить свой асинхр к ложным в $.ajaxSetup();

, а также, вы должны получить ваши возвращенные данные из функции обратного вызова успеха

casper.then(function() { 
    var result = casper.evaluate(function() { 

     var $return = ''; // initiate $return 

     var async = $.ajaxSetup()['async']; 
     $.ajaxSetup({'async':false}); // Set async to false 

     $.get('http://localhost/test.php', function(data) { 

      $return = data; // test.php return data is saved to $return 

     }); 

     $.ajaxSetup({'async': async }); // Set async to back to original value 

    }); 
    result = JSON.stringify($return); 
    this.echo(result); 
    this.exit(); 
}); 

Единственный недостаток этого, благодаря Esailija для указывая на то, что ваша страница будет «висеть» до тех пор, пока запрос не будет завершен.

+0

Удивительный, он работает, спасибо! После вашего решения мне пришлось добавить «webSecurityEnabled: false», но это уже другая история. – Crayl

+2

Вы не упомянули об этом, так как для пользователя страница будет разбита во время ожидания запроса. Вы не можете заметить это в разработке, потому что ответы все равно мгновенно. – Esailija

+0

@Esailija Да, страница будет вибрировать ** ЕСЛИ ** вы запускаете этот скрипт перед загрузкой DOM. Если вы выполняете это после, в ответ будет просто задержка. –

1

$.get является асинхронным, его результат будет недоступен до .

casper.then(function() { 
    var _this = this; 
    casper.evaluate(function() { 
     $.get('http://localhost/test.php', function(result) { 
      _this.echo(result); 
      _this.exit(); 
     }); 
    }); 
}); 
0

Нигде в jQuery docs для $ .get() не возвращает $ .get() содержимое страницы. Вы используете экземпляр транспорта http.