2013-08-14 4 views
5

Я создаю расширение браузера Google Chrome, которое использует $.ajax запросы на отправку данных с веб-страниц на мой сервер (в настоящее время размещается с использованием localhost). content_script.js файл, который выполняется в контексте веб-страниц (more on content scripts), что расширение имеет доступ к пробегов этот код:Запрос Ajax успешно завершен, но результат пуст

//note: encode64String is assigned earlier in the script... 

$.ajax({ 
type: "POST", 
url: "http://localhost:8888/quartzsite/uploadendpoint.php", 
type: "jsonp", 
data: {img: encode64String}, 
contentType: "application/x-www-form-urlencoded;charset=UTF-8", 
success: function(data){ 
    console.log("The ajax request succeeded!"); 
    console.log("The result is: "); 
    console.log(data); 
}, 
error: function(){ 
    console.log("The request failed"); 
} 
}); 

Проблема заключается в том, что Ajax запрос преуспевает, но data аргумент, что он возвращается в пустой ...

консоль выглядит следующим образом после того, как код запуска: enter image description here

в настоящее время содержимое файла uploadedendpoint.php являются:

<?php 
    header("Access-Control-Allow-Origin: *"); 
    echo 'This comes from php file'; die(); 
?> 

<!DOCTYPE html> 
<html> 
<head> 
    <title>Title of the document</title> 
</head> 

<body> 
The content of the document...... 
</body> 

</html> 

Это означает, что в переменной data должно быть хотя бы что-то.

Я также подтвердил, что запрос преуспевает, потому что, когда я отправить запрос на сломанной URL (т.е. uploaddddddendpoint.php) кода внутри error параметра $.ajax «s выполняется.

Я читал подобные вопросы, как jQuery $.ajax response empty, but only in Chrome, но безрезультатно ...

UPDATE:

Я удалил недопустимый параметр второго type: "jsonp" полностью и добавил dataType: "text/html". Теперь я получаю неудачный запрос ajax каждый раз, когда код запускается.

UPDATE: Как ни странно меняется dataType : "text/html" к dataType : "html" вызывает ajax запрос на успех, но снова с пустой data переменной. UPDATE: При использовании Dev инструментария для мониторинга сети XHR Эти отправленные сообщения/ответ:

enter image description here enter image description here

Что касается флага возможного дублирования в Impossible to cross site ajax api calls in a chrome extension? я предлагаю иначе! Я исследовал этот вопрос, и проблема НЕ кажется одинаковой.

+0

Попробуйте это в первой строке файла php: ' '- Проверьте, получилось ли это в консоли. – Sergio

+0

Что показывает вкладка «Сеть»? попробуйте удалить тип 'jsonp'. – akonsu

+0

@Sergio без изменений ... – Brannon

ответ

2

Почему у вас есть два поля type в вашем запросе AJAX? jsonp и POST.

$.ajax({ 
    type: "POST", // OK 
    url: "http://localhost:8888/quartzsite/uploadendpoint.php", 
    type: "jsonp", // ??? 
    // ... 
}); 

UPDATE:

Я думаю, вы должны использовать относительный путь для URL. Попробуйте изменить свой запрос на следующее:

$.ajax({ 
    type: "POST", 
    url: "/quartzsite/uploadendpoint.php", 
    dataType: "text/html", 
    data: {img: encode64String}, 
    success: function(data){ 
     console.log("The ajax request succeeded!"); 
     console.log("The result is: "); 
     console.dir(data); 
    }, 
    error: function(){ 
     console.log("The request failed"); 
    } 
}); 

Вы можете видеть, что я заменил URL с /quartzsite/uploadendpoint.php. Это может решить проблему ... абсолютный URL-адрес может сигнализировать кросс-доменный запрос, который не является тем, что вам нужно.

Кроме того, в качестве побочного примечания нет необходимости устанавливать contentType, поскольку то, что вы его устанавливаете, уже является значением по умолчанию. Если вы отправляете JSON или XML, вам нужно установить contentType.

+0

Хороший улов! Я удалил тип «jsonp» и добавил правильный 'dataType'. Теперь запрос полностью не работает (что может фактически означать, что оно ранее давало ложный результат). – Brannon

+1

Вы не должны использовать «jsonp» в любом месте вашего запроса. Это расширенный метод для междоменных запросов, и я сомневаюсь, что это то, что вам нужно. У вас все еще есть это? – ktm5124

+0

Я удалил 'jsonp' – Brannon

Смежные вопросы