2015-07-15 2 views
1

Что не так с этим кодом?jQuery Ajax не работает в PhantomJS

Я пытаюсь отправить пост запрос с помощью JQuery Ajax из PhantomJS, но не возвращает ничего, кроме "поста:"

var webPage = require('webpage'); 
var page = webPage.create(); 
page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js', function() { 
    console.log('post:'); 
    $.post("http://httpbin.org/post", function(data) { 
     console.log(data); 
    }); 
}); 
+3

'$ jQuery' должен быть' jQuery' или '$'. Не оба. Также проверьте, что ваш URL-адрес возвращает что-то (наличие обработчика ошибок будет хорошим) – blex

+0

@blex, я пробовал jQuery.post и $ .post, но он все равно ничего не возвращает .. –

ответ

3

PhantomJS имеет два контекста. page.includeJs() инструктирует контекст DOM (контекст страницы) для загрузки данного файла JavaScript. Обратный вызов вызывается, когда он выполняется. Это означает, что jQuery будет доступен только в контексте страницы, а не за его пределами. Вы получаете доступ к контексту страницы через page.evaluate().

Пример:

page.onConsoleMessage = function(msg){ 
    console.log("remote> " + msg); 
}; 

page.includeJs('http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js', function() { 
    page.evaluate(function(){ 
     console.log('post:'); 
     $.post("http://httbpin.org/post", function(data) { 
      console.log(data); 
     }); 
    }); 
    setTimeout(function(){ 
     // don't forget to exit 
     phantom.exit(); 
    }, 2000); 
}); 

Вам придется работать PhantomJS с опцией --web-security=false командной строки, в противном случае он не сможет отправить запрос из-за ограничений междоменных:

phantomjs --web-security=false script.js 

Обратите внимание, что page.evaluate() изолирован песочницей. Прочтите полностью documentation.

+1

--web-security = false is решение –

1

Проблема связана с безопасностью, вы пытаетесь получить доступ к другому домену.

В хроме можно отключить перекрестные ограничения домена, выполнив следующую команду в консоли:

хром-браузер повреждают-веб-безопасности

Кроме того, вы можете добавить эти флаги вашего прямого доступа.

+0

PhantomJS не является хромом. –