2015-07-29 2 views
0

Я использую jQuery для отправки значения в файле PHP через $.post.=== в javascript и ответ, возвращенный из файла php ajax

$.post("ajax/comment_delete.php", { 
    comment_id: comment_id 
}, function(response){/ 
    if (response == true) { 
     tr.fadeOut(500, function() { 
      tr.remove(); 
     }) 
    } 
})//$.post 

В PHP файл у меня есть:

if (isset($_POST['comment_id'])) { 
    $comment_id = (int)$_POST['comment_id']; 
    $comment = comment::find_by_id($comment_id); 
    if (is_object($comment)) { 
     echo $comment->delete(); 
    } 
} 

Все работает правильно, за исключением того, когда я использую response===true это не сработало. Мой метод удаления возвращает true, если комментарий удален. Когда I alert ответ, он показывает 1; нормально ли для 1===true быть ложным? Или что-то не так?

+5

'console.log ("1" == TRUE); console.log ("1" === true); 'Тип coherion – epascarello

+4

^Это. '===' проверяет точное соответствие, поэтому вы в основном говорите, что ответ является логическим значением true, которого он никогда не будет. '==' в то время как проверить, является ли ответ [правдивым] (http://www.sitepoint.com/javascript-truthy-falsy/) или нет: – neilsimp1

+0

@neilsimp проверяет точное соответствие, поэтому вы в основном говорите, логическое значение true, которое никогда не будет. php отправить true как 1? – peyman

ответ

5

Это нормально? или что-то не так?

Это нормально.

Серверный код излучающее значения "1" (или 1? На самом деле не имеет значения для целей этого сравнения), и является ли то, что вы хотите ваш код на стороне сервера испускать еще один материя полностью. Но до тех пор, как , что он испускает, JavaScript ведет себя нормально здесь.

"1" is "truthy" in JavaScript. Это означает, что "1" можно рассматривать как true для базового сравнения с булевым. Однако "1" не тот же тип как true, поэтому более строгое сравнение (===) не выполняется.

Короче:

  • "1" == true -> да
  • "1" === true -> нет
+0

, так что если строка ошибки испускает из php-файла, она исчезла, правда? – peyman

+0

@peyman: Ну, да. Любая непустая строка считается «истиной» для базового сравнения с булевым. Весь ваш клиентский код делает прямо сейчас, проверяя, был ли получен какой-либо непустой ответ. Если вы хотите передать больше информации, не полагайтесь на просто логическое. Для ошибок используйте коды ошибок HTTP и включайте любые сообщения в более структурированный объект в ответе.Тогда ваш код на стороне клиента может проверить эти вещи. – David

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