2013-07-26 3 views
1

Я выкладываю некоторое значение для PHP, то PHP для печати отправить обратно JS console.log с помощью Ajax, есть проблема:Сообщение значения с помощью AJAX для PHP

сборки массив (я сомнение ниже я сделал это массив ??)

$('.eachcontainer').each(function(){ 
     var arr = $(this).find('img').map(function(){ 
      return $(this).attr('src'); 
     }); 
     console.log(arr); 
     // result: 
     // ["16.png", "17.png", "19.png", "18.png"] 
     // ["0.png"] 
     // ["0.png"] 
     // [] 
     // [] 
     $.ajax({ 
      type: "POST", url: "update.php", 
      data: arr 
     }).done(function(msg){ 
      console.log(msg); 
     }); 
}); 

PHP

print_r($_POST); 

JS вернуться console.log

Array 
(
    [undefined] => 
) 
Array 
(
) 
Array 
(
) 
Array 
(
    [undefined] => 
) 

Почему это не работает? Как я могу это исправить?

Кроме того, я попытался изменить синтаксис в моей функции ajax data: {arr: arr}, но это тоже не сработало. сообщение
Ошибка:
TypeError: Type error jquery-1.10.1.min.js:6
Найдено линия ошибки в Jquery-1.10.1.min.js: 6:
t = x.isFunction(t) ? t() : null == t ? "" : t, i[i.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t)

ответ

0

Сначала вам нужно позвонить arr.get(), чтобы получить результат jquery.map как обычный массив javascript. Затем вы можете передать его Аякса параметра Я данных, как:

data: { "images" : arr.get() } 

Так полный вызов Ajax будет выглядеть следующим образом:

$.ajax({ 
    type: "POST", url: "update.php", 
    data: { "images" : arr.get() } 
}).done(function(msg){ 
    console.log(msg); 
}); 

Вы можете прочитать массив обратно в PHP как:

$images = $_POST['images']; 
+0

wowww !!! он работает, я удаляю строку 'processData: false' Спасибо! –

1

вы не построили правильную пару ключей & значение, используя ваши данные, если вы хотите передать сырой поток данных, а затем установить processData: false и захват с php://input

var arr = $(this).find('img').map(function(){ 
      return $(this).attr('src'); 
     }); 
     $.ajax({ 
      type: "POST", url: "update.php", 
      data: arr, 
      processData: false, 
     }).done(function(msg){ 
      console.log(msg); 
     }); 

на стороне PHP

$data = file_get_contents("php://input"); 
+0

если установленный процессData: false будет влиять на другие данные? потому что я пытаюсь опубликовать другие данные: {x: x, y: y} sametime –

+0

Это повлияет только на текущий запрос. Последующие запросы будут затронуты только тогда, когда вы установите для параметра processData значение false – devnull69

+0

, тогда как я правильно написал синтаксис: data {x: x, y: y, arr: arr} php print $ _POST ['x']; print $ _POST ['y']; print file_get_contents ("php: // input"); –

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