Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как передать данные, содержащие url посредством ajax? (https://javascript.ru/forum/misc/54091-kak-peredat-dannye-soderzhashhie-url-posredstvom-ajax.html)

Poveritov 03.03.2015 10:12

Как передать данные, содержащие url посредством ajax?
 
Пытаюсь передать ajax'ом (jquery) на сервер данные.
Данные содержать url строку

пример передаваемой строки
[url]https://cs1-39v4.vkbm-cdn.net/p5/2802d043d8f07b.mp3?extra=7RnGrmjAa5yrfrJ-s80VLBAgXslU8Eet1IxMhNhEubF-QYfWdT99I9EE5mtsccJUQb9w5YSmObDQsUStoTqVjUrYXT_I8[/url]


Вот код запроса
$.ajax({
	dataType:"text",
	url:'/iframe/json',
	data:({"uA":JSON.stringify(data.response[0].url)}),
	type:'POST',
	success:function(msg){
		console.log(msg);
	}		
});


Проблема возникает на стороне сервер, когда возвращаю значение
var_dump(json_decode($_POST['uA'],true));
Иногда возвращается значение, иногда возвращается пустое значение.
Это зависит от передаваемого url. Возможно в определенных url (пример приведен выше) присутствуют символы, обрубающие передачу данных.

Возник вопрос, как правильно передавать данные, содержащие url значение?

з.ы. Google не помог(

danik.js 03.03.2015 10:39

А зачем тут вообще JSON.stringify и json_decode?

Poveritov 03.03.2015 10:50

вообще по заданию, мне нужно передавать json-массив, но для примера я упростил передаваемую переменную.
Собственно роли это никакой не играет, хоть с JSON.stringify и json_decode, хоть без них, значение для данного url пустое.
Остальные поля, такие как Name, id, передаются по отдельности нормально, а с url - пустота.

ksa 03.03.2015 11:00

Цитата:

Сообщение от Poveritov
data:({"uA":JSON.stringify(data.response[0].url)})

достаточно просто написать

data:({"uA": data.response[0].url}

Poveritov 03.03.2015 11:09

Цитата:

Сообщение от ksa (Сообщение 359338)
достаточно просто написать

data:({"uA": data.response[0].url}

К сожалению, нет. В этом случае просто возвращается NULL.

ksa 03.03.2015 11:14

Цитата:

Сообщение от Poveritov
К сожалению, нет. В этом случае просто возвращается NULL.

Да ну нафик! :D

Бивас, тест! (с)

tmp.csp
<!DOCTYPE html>
<html ng-app='appTest'>
<head>
<script src='http://code.jquery.com/jquery-latest.js'></script>
<!--
<script src="https://code.angularjs.org/1.3.9/angular.min.js"></script>
<script src="https://code.angularjs.org/1.3.9/angular-route.js"></script>
<link rel='stylesheet type=text/css href=tmp.css' />
-->
<style type='text/css'>
</style>
<script type='text/javascript'>
$(function(){
	var url='https://cs1-39v4.vkbm-cdn.net/p5/2802d043d8f07b.mp3?extra=7RnGrmjAa5yrfrJ-s80VLBAgXslU8Eet1IxMhNhEubF-QYfWdT99I9EE5mtsccJUQb9w5YSmObDQsUStoTqVjUrYXT_I8';
	$.ajax({
		dataType: "text",
		url: 'tmp1.csp',
		data: {'uA': url},
		type: 'POST',
		success:function(data){
			alert(data);
		}		
	});
});
</script>
</head>
<body> 
</body>
</html>

tmp1.csp
#(%request.Data("uA",1))#

Вот, что послал - то и вернул! :) Т.ч., что-то ты не так мастыришь...

danik.js 03.03.2015 11:23

Цитата:

Сообщение от ksa
что-то ты не так мастыришь

Он json_decode не убрал из php.

danik.js 03.03.2015 11:27

Цитата:

Сообщение от Poveritov
иногда возвращается пустое значение

Смотри ошибку через json_last_error()
Когда ошибка - изучай че тебе пришло в post ua - видимо там ошибка json-синтаксиса. Только откуда она там берется - загадка.

Poveritov 03.03.2015 11:43

Цитата:

Сообщение от danik.js (Сообщение 359351)
Он json_decode не убрал из php.

Нет, все исправил. Вот код
$.ajax({
	dataType:"text",
	url:'/iframe/json',
	data:{"uA":data.response[0].url},
	type:'POST',
	success:function(msg){
		console.log(msg);
	}		
});


php: var_dump($_POST['uA']);

Выявилась другая особенность. Дело как оказалось не в url, так как если использовать браузер Opera, то все работает и значение возвращается. До этого я использовал Mozilla, там все глючит. Может подскажите, почему не поддерживается кроссбраузерность?

ksa 03.03.2015 11:53

Цитата:

Сообщение от Poveritov
Выявилась другая особенность. Дело как оказалось не в url, так как если использовать браузер Opera, то все работает и значение возвращается. До этого я использовал Mozilla, там все глючит. Может подскажите, почему не поддерживается кроссбраузерность?

Я запустил свой пример в ФФ - все работает, все передается как нужно...


Часовой пояс GMT +3, время: 03:54.